Fesor
@Fesor
Full-stack developer (Symfony, Angular)

Хранение атрибутов объектов в базе, как быть?

На данный момент необходимости в этом нету, но иногда появляется. Задумал я написать некий компонент, который бы разруливал поиск/хранение атрибутов для каких-то объектов. Но встал вопрос, как их хранить то?

обычно я храню атрибуты денормализовано, в виде сериализованного массива у объекта, которому эти атрибуты принадлежат. Таким образом достигается максимальная производительность. Поиск же реализован путем дублирования данных в MongoDB.

Но возникают сложности в поддержании атрибутов в актуальном состоянии (по сути получается извращенная EAV структура). Хранить все в монго не позволяют требования, только как кэш по сути. Имеет ли смысл хранить нормализовано (классическая EAV) атрибуты в базе (mysql к примеру), дублировать их в виде кэша для выборок (сериализованный массив у самих объектов), и еще и в Mongo (для поиска).



Есть задумка в сериализованном виде хранить только id атрибутов, сами атрибуты хранить в mysql а уже в Mongo реализовать все полностью, и для поиска, и для выборок.



Задача сферическая, не имеющая отношения к реальным проектам. Просто мне интересно.
  • Вопрос задан
  • 4502 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Renius
дурак восторженный
1. у Ruby есть OpenStruct, поищите реализацию для PHP
Rails позволяет сериализовывать в OpenStruct
2. На монге свет клином не сошелся, можно использовать все что угодно. Мой MySQL сложные поиски по нормализованным данным производит за считанные миллисекунды при сотнях тысяч записей. PostgreSQL умеет делать это еще быстрее. Для поиска можно использовать Sphinx.
3. Нормализация большого количества атрибутов имеет разумный предел. Недавно писал таблицу с 150 полями. Хранить все 150 полей одного объекта в нормализованном виде — бред и адский труд.
Ответ написан
Ваш ответ на вопрос

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

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