@summon7300
Backend-разработчик

Структура универсального каталога данных?

Добрый день!
Появилась необходимость запилить механизм универсальных каталогов, с возможностью создавать/изменять каталоги, их разделы и свойства элементов. Есть опыт работы с Bitrix и его инфоблоками, и совсем немного сталкивался с узлами и CCK в Drupal.
Хочу узнать какие есть ещё варианты решения такой задачи. Возможно это какие-то бандлы для Symfony, или плагины в Composer. Если таковых нет, то очень помогут советы по структуре БД:
1. стоит ли разделять элементы из разных каталогов в отдельные таблицы, или хранить их в одной, как делает Bitrix
2. где размещать свойства элементов, которые будут создаваться пользователем через какой-нибудь интерфейс (отдельные таблицы со значениями свойств (инфоблоки Bitrix), добавление новых колонок в таблицу элементов (хайлоад блоки в Bitrix), если отдельные таблицы то оптимально ли делать их для каждого свойства в отдельности (как в Drupal))
3. ...

Желательно что бы такая структура могла без сильного скрипа и треска работать с большим количеством элементов (например 200+ тыс.), производить выборку с фильтрацией и разбивкой для постраничной навигации в одном запросе.
  • Вопрос задан
  • 285 просмотров
Пригласить эксперта
Ответы на вопрос 1
@MadridianFox
Web-программист, многостаночник
Вангую - щас понабегут люди с советами типа "юзай mongodb"...
Вообще можно использовать EAV. Это когда атрибуты сущности хранятся не горизонтально (столбцы в таблице), а вертикально (один атрибут - одна строка). Дополнительно нужны таблицы, которые будут хранить список типов сущностей, список типов атрибутов и связи типов сущностей и типов атрибутов.

Но предупреждаю - есть ощутимое проседание по быстродействию, да и работать с этим может быть не так удобно.
В случае, когда необходимо соорудить хранилище для однотипных сущностей с опциональными атрибутами, например каталог товаров, где всё есть товар, но у холодильника есть мощность, а у смартфона - количество мегапикселей это в самый раз.
Так вот, в таком случае быстродействие по фильтрации достигается через создание отдельного индекса, может даже с использованием отдельного ПО, такого как Sphinx.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы