[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Mysql и 700 тысяч записей. Насколько быстро?
IceNinja
Делаю каталог на YII.
Предполагается несколько типов объектов, скажем, А, B и С, причём вот в такой родительской иерархии - A > B > C.
Объектов типа С предполагается около 15 тысяч в БД. А объектов А и B - существенно меньше, может, вместе наберётся ну две тысячи максимум..

Суть вот в чём. Где-то нужно хранить свойства этих объектов, причём есть два важных момента:
1) В принципе, наборы свойств для разных типов объектов различаются. Т.е. для А - это несколько свойств, около 5-10, для объектов типа В - ну тоже где-то столько же, а для С - около 15-20 свойств, может быть и больше, допустим, 20. Всего свойств, выходит, 20 + 10 + 10 = 40 где-то.
2) и при этом нужно иметь возможность добавлять ещё свойства, например, объекту типа А добавить несколько свойств, для него нехарактерных.

Короче, решил я это дело хранить так - объекты в одной таблице, свойства в другой, наборы свойств - в третьей, а саму связь свойств с объектами - в четвёртой. Примерно как-то так: user posted image
И вот эта четвёртая таблица ("Objects_properties") вызывает у меня нервяк. Если там будет (15000 + 2000 )* 40 = 680000 записей. Не просяду ли я с таким объёмом? Объекты нужно будет фильтровать там, то, сё. Может, вместо Мускула использовать что-то ещё? Или спроектировать иначе?
T1grOK
Такие проблемы решаются по мере их поступления. А не по принципу - "я решил сконструировать автомобиль, какая будет его максимальная скорость".


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
sergeiss
T1grOK, ты не прав! Проблемы проектирования БД надо как раз на начальном этапе решать, а не тогда, когда база падать начнет smile.gif

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

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
T1grOK
sergeiss вопрос в чем "Насколько быстро?". На этот вопрос никто не ответит. Неизвестно какое соотношение Insert|update|select, интенсивность обращений.
И немаловажный факт - используемые аппаратные ресурсы.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
traviam
Цитата (sergeiss @ 7.06.2013 - 16:27)

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

Я не автор темы, но есть такая же проблема.
Если набор свойств хранить в одной строке (типа, "width:100; height:200; cost:180;", или всякие json-ы и сериализованные массивы), то как организовать поиск? Не like-ами же.
T1grOK
Цитата (T1grOK @ 8.06.2013 - 05:56)
Я не автор темы, но есть такая же проблема.

Ну так тему отдельную создай. Отвечу.
И другим проще будет ориентироваться, а не так что 5 тем в одной.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
sergeiss
Цитата (traviam @ 16.06.2013 - 11:46)
Если набор свойств хранить в одной строке (типа, "width:100; height:200; cost:180;", или всякие json-ы и сериализованные массивы), то как организовать поиск? Не like-ами же.

Ты не понял... Под словами "в одной строке" я имел ввиду, что в одной записи, т.е. в разных колонках smile.gif

Цитата (T1grOK @ 16.06.2013 - 12:45)
Ну так тему отдельную создай.

Да пусть тут будет, наверное. Потому что и к "основной" теме имеет отношение.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
traviam
Цитата (T1grOK @ 16.06.2013 - 12:45)
Ну так тему отдельную создай. Отвечу.

Да я вот согласен с sergeiss, лучше в этой теме дообсуждать - проблема такая-же, только БД уже есть.. :-(
Ответь тут, если не трудно :3
Цитата (sergeiss @ 16.06.2013 - 13:00)
Ты не понял... Под словами "в одной строке" я имел ввиду, что в одной записи, т.е. в разных колонках smile.gif

У фирмы уже есть заполненная БД (MySql).
Суть такова.
Таблица групп товаров {group_id, group_name} - всего около 180 штук.
И таблица самих товаров {product_id, product_group_id, product_name, product_attributes} - всего около 50 000 штук (по 200-500 штук в каждой группе).
В product_attributes - строки вида "width:100; height:200; cost:180;", самих атрибутов наберётся тоже штук 50 000..
Проблема: как искать по такой БД?
Извратиться и поменять структуру таблиц, вынеся атрибуты в отдельную таблицу вида {attribute_id, attribute_name} и добавить таблицу для связей {product_id, attribute_id, attribute_value}?
sergeiss
Цитата (traviam @ 16.06.2013 - 13:19)
Извратиться и поменять структуру таблиц, вынеся атрибуты в отдельную таблицу вида {attribute_id, attribute_name} и добавить таблицу для связей {product_id, attribute_id, attribute_value}?

Да. Только это называеться не "извратиться", а "привести из извратного вида к нормальной форме" smile.gif (подробнее см. ссылку)
Именно это, "нормальную форму", я и имел ввиду:
Цитата (sergeiss @ 16.06.2013 - 13:00)
Под словами "в одной строке" я имел ввиду, что в одной записи, т.е. в разных колонках


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

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
traviam
Цитата (sergeiss @ 16.06.2013 - 16:22)
Только это называеться не "извратиться", а "привести из извратного вида к нормальной форме"

"Извратиться" - в смысле перегона кучи имеющихся данных в новые таблицы и переписывания чужого кода для правильной работы с новой структурой..
Про нормальные формы в курсе, спасибо. Просто думал - вдруг есть способ каким-нибудь костылём сделать поиск без изменения структуры :-)
sergeiss
Цитата (traviam @ 16.06.2013 - 16:32)
Просто думал - вдруг есть способ каким-нибудь костылём сделать поиск без изменения структуры :-)

Нее... Халява отменяется smile.gif У тебя впереди "полный изврат":
Цитата (traviam @ 16.06.2013 - 16:32)
"Извратиться" - в смысле перегона кучи имеющихся данных в новые таблицы и переписывания чужого кода для правильной работы с новой структурой..



_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
T1grOK
Цитата (traviam @ 16.06.2013 - 07:46)
Если набор свойств хранить в одной строке (типа, "width:100; height:200; cost:180;", или всякие json-ы и сериализованные массивы), то как организовать поиск? Не like-ами же.

Отвечу более обощенно. БД очень и очень не любят большие поля. Поиск по таким полям замедляется, индексы разростаются и опять же становятся неповоротливыми и тормозят.
Вынеся атрибуты в отдельную таблицу, мы уже будем выбирать в основном по числовым данным, а это в десятки и сотни раз быстрее, чем обрабатывать строковые данные.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.