Задать вопрос

Как оптимальнее реализовать динамический набор атрибутов объекта с возможностью поиска по ним?

Собственно, вопрос: как оптимальнее реализовать динамический набор атрибутов объекта с возможностью поиска по ним?


Я уже некоторое количество времени разрабатывают решения на классических реляционных СУБД и думаю пока реляционным образом, хотя и стараюсь меняться.

Задача динамического набора атрибутов сама по себе довольно проста в рамках реляционной модели — таблица вроде


id объекта | id атрибута | значение


Но встаёт вопрос оптимальности структуры: допустим, максимальное значение текстового атрибута, по которому должна быть возможность искать, — varchar(255).

Однако, при этом в системе также могут существовать и целочисленные атрибуты и дробные и ещё бог знает какие.

При такой структуре таблицы придётся их всех вписывать в varchar(255), что, при большом количестве данных сильно увеличит объёме и замедлит поиск.


Можно попробовать пойти по пути экстенсивной оптимизации и создать две или больше таблиц для разных типов атрибутов, или, возможно, ввести вместо одного поля «значение» два: текстовое и числовое. Но мне как-то интуитивно не нравится это решение — придётся сильно усложнять логику формирования поисковых запросов.


Подскажите, пожалуйста, есть ли что почитать на эту тему интересного? Может, NoSQL-решения могут открыть новые способы решения проблемы?


UPD:

почитал про Mongo. Внешне там всё красиво — документ, у него произвольный набор атрибутов, можно строить индексы. Поверхностно задача решается просто. А внутри как? Насколько поиск по таким коллекциям будет выгоднее (по ресурсам), чем SQL-решение?
  • Вопрос задан
  • 3754 просмотра
Подписаться 6 Оценить Комментировать
Ответ пользователя Max B К ответам на вопрос (4)
DeusModus
@DeusModus
Есть такой шаблон — en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model. Успешно применяется в Magento и куче проектов поменьше. На первый взгляд именно то, что вам нужно.
Ответ написан
Комментировать