Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Оптимальная организация таблицы
 
 автор: Gendalf   (23.11.2007 в 17:46)   письмо автору
 
 

Посоветуйте как лучше организовать таблицу, нужно в таблице хранить около 200 параметров для каждого пользователя. Самый простой вариант это создать 200 с лишним колонок, но мне кажется это не рационально. Причем значения параметров это 1 или 0, т.е. используется параметр или нет.
Например
id | count | m1 | m2 | ... | m200
1 | 23 | 1 | 0 | ... | 1
2 | 0 | 0 | 0 | ... | 1
Второй вариант это используемые параметры загнать в строку
Например
id | count | parameters
1 | 4 | 1,45,23,35,76,99,101,123,
2 | 98 | all
3 | 0 | 98,7,65,67,99,200,
и с помощью LIKE выбирать пользователя, у которого есть тот или иной параметр

   
 
 автор: Axxil   (23.11.2007 в 22:28)   письмо автору
 
   для: Gendalf   (23.11.2007 в 17:46)
 

если значения могут быть 1 или 0 то каждая комбинация параметров это двоичное число.
При установке параметров юзера переводим его в десятичное и сохраняем в одно поле.
пр выборке результата комбинация параметров опять же двоичное число, переводим в десятичное и ищем в базе.
скорость гораздо выше получится, однако :)

PS в порядке бреда, так как не знаю условий задачи

PPS а на самом деле, нафига 200 параметров? Подозреваю что оптимизировать надо не базу, а реализацию...

   
 
 автор: Gendalf   (24.11.2007 в 16:30)   письмо автору
 
   для: Axxil   (23.11.2007 в 22:28)
 

>если значения могут быть 1 или 0 то каждая комбинация параметров это двоичное число.
>При установке параметров юзера переводим его в десятичное и сохраняем в одно поле.
>пр выборке результата комбинация параметров опять же двоичное число, переводим в десятичное и ищем в базе.
>скорость гораздо выше получится, однако :)

чет не понял как искать в базе, можно пример. Да и ктому же 2 в двухсотой степени это огромное число.

>PS в порядке бреда, так как не знаю условий задачи
>
>PPS а на самом деле, нафига 200 параметров? Подозреваю что оптимизировать надо не базу, а реализацию...

задача примерно такая:
нужно выбрать рандомно одного пользователя, в зависимости того или параметра.

   
 
 автор: Axxil   (25.11.2007 в 14:42)   письмо автору
 
   для: Gendalf   (24.11.2007 в 16:30)
 

> 2 в 200 степени
да, не подумал. Перевод в десятичный формат тут не нужен.
Значит просто храните конфигурацию параметров в виде строки 0 и 1
и соответственно так и ищете пользователя.
Формируете строку параметров. Если параметр true то 1 если false то 0. Так выставляете все параметры. Получаете примерно следующее

<?
  $flags 
'0000100100...01';
   
$sql 'SELECT * FROM users WHERE flags=\''.$flags.'\'';
?>

По-моему самое оптимальное. И городить 200-колоночную таблицу смысла нет никакого.

   
 
 автор: Gendalf   (25.11.2007 в 15:17)   письмо автору
 
   для: Axxil   (25.11.2007 в 14:42)
 

мне нужно искать не по всем параметрам, а только по одному. Т.е. у кого выбран допустим параметр м22

   
 
 автор: Axxil   (25.11.2007 в 17:33)   письмо автору
 
   для: Gendalf   (25.11.2007 в 15:17)
 

Тогдп можно определять значение параметра c номером 22 с помощью функции SUBSTRING
<? 
  $flags 
'0000100100...01'
   
$sql 'SELECT * FROM users WHERE SUBSTRING(flags,22,1)=1'
?> 

   
 
 автор: Gendalf   (25.11.2007 в 19:38)   письмо автору
 
   для: Axxil   (25.11.2007 в 17:33)
 

Так тоже думал сделать, но не будет ли большой нагрузки?
Записей в бд будет около 20 тысяч

   
 
 автор: Axxil   (26.11.2007 в 09:14)   письмо автору
 
   для: Gendalf   (25.11.2007 в 19:38)
 

20000 записей, это ерунда для БД.
Предлагаю не парится, а реализовать.
Когда пойдут проблемы с падением базы, тогда и будете придумывать обходные манёвры.
Какая нагрузка (в хитах или запросах/минуту) предполагается?

   
 
 автор: Gendalf   (27.11.2007 в 16:19)   письмо автору
 
   для: Axxil   (26.11.2007 в 09:14)
 

думаю максимум 10 000 хитов в сутки

   
 
 автор: Axxil   (27.11.2007 в 16:44)   письмо автору
 
   для: Gendalf   (27.11.2007 в 16:19)
 

Спите спокойно. База должна справиться.

   
 
 автор: Trianon   (23.11.2007 в 22:57)   письмо автору
 
   для: Gendalf   (23.11.2007 в 17:46)
 

Возможно, Вас заинтересует вот эта тема:
http://softtime.ru/forum/read.php?id_forum=1&id_theme=38111

   
 
 автор: Faraon   (25.11.2007 в 02:09)   письмо автору
 
   для: Gendalf   (23.11.2007 в 17:46)
 

скорее всего будет рациональнее, хранить пользователей в одной таблице, а параметры в другой, связанной между собой.

   
 
 автор: Gendalf   (25.11.2007 в 09:04)   письмо автору
 
   для: Faraon   (25.11.2007 в 02:09)
 

т.е. создать отдельную таблицу с двухстами колонками?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования