Сведения о вопросе

Getthesound

22:31, 24th August, 2020

Теги

SQL   NoSQL   EAV    

Можно ли обойтись без Entity-Attribute-Value?

Просмотров: 289   Ответов: 2

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

Тот же Magento Commerce для этих целей использует EAV структуру, из-за которой селект-запросы сильно усложняются и работают не очень быстро. Пока единственная мысль — периодически преобразовывать EAV в нормальную таблицу, из которой и будут идти выборки. Есть ли более эффективный способ в рамках MySQL или PostgreSQL?

Также в процессе поиска ответа на этот вопрос не раз встретил мнение, что в этом случае стоит отказаться от реляционной базы и перейти на noSQL. Насколько это соответствует истине и будет ли это быстрее работать?



  Сведения об ответе

lesha

22:46, 7th August, 2020

Проблема EAV в том, что каждое поле лежит независимо от объекта. Т.е. выборка 10-ти объектов, из 10-ти полей, сделает около 100 random seek. Варианты решения:
1. Memory таблицы — быстрый random seek, ограниченный размер и необходимость синхронизации с реальными данными.
2. Sphinx и ему подобные. Дополнительно храним данные в формате, более удобном для фасеточного поиска.
3. nosql — легче масштабировать, данные зачастую хранятся в памяти, отсутствие схемы, но при этом с возможностью создания индексов по полям.


  Сведения об ответе

repe

13:09, 27th August, 2020

Можно попробовать вариант с entity, у которого есть: идентификатор, общие поля (типа стоимости и наличия), поле для поиска (конкатенированные значения атрибутов через дикий разделитель) и поле с XML (или любой другой формат), в котором будет храниться вся информация.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться