На данный момент необходимости в этом нету, но иногда появляется. Задумал я написать некий компонент, который бы разруливал поиск/хранение атрибутов для каких-то объектов. Но встал вопрос, как их хранить то?
обычно я храню атрибуты денормализовано, в виде сериализованного массива у объекта, которому эти атрибуты принадлежат. Таким образом достигается максимальная производительность. Поиск же реализован путем дублирования данных в MongoDB.
Но возникают сложности в поддержании атрибутов в актуальном состоянии (по сути получается извращенная EAV структура). Хранить все в монго не позволяют требования, только как кэш по сути. Имеет ли смысл хранить нормализовано (классическая EAV) атрибуты в базе (mysql к примеру), дублировать их в виде кэша для выборок (сериализованный массив у самих объектов), и еще и в Mongo (для поиска).
Есть задумка в сериализованном виде хранить только id атрибутов, сами атрибуты хранить в mysql а уже в Mongo реализовать все полностью, и для поиска, и для выборок.
Задача сферическая, не имеющая отношения к реальным проектам. Просто мне интересно.
1. у Ruby есть OpenStruct, поищите реализацию для PHP
Rails позволяет сериализовывать в OpenStruct
2. На монге свет клином не сошелся, можно использовать все что угодно. Мой MySQL сложные поиски по нормализованным данным производит за считанные миллисекунды при сотнях тысяч записей. PostgreSQL умеет делать это еще быстрее. Для поиска можно использовать Sphinx.
3. Нормализация большого количества атрибутов имеет разумный предел. Недавно писал таблицу с 150 полями. Хранить все 150 полей одного объекта в нормализованном виде — бред и адский труд.
1) OpenStruct не совсем то что меня интересует. Это можно на PHP сделать без особых проблем. Но все равно спасибо.
2) Монга это один из вариантов, предполагается что для доступа к данным добавится еще один уровень абстракции, при помощи которого можно хоть только в MySQL хранить, хость в постгре хоть в сфинксе, просто с монго в этом плане чуточку проще.
При реализации EAV структуры помниться мне производительность нехило так падала, и Magento хорошее тому подтверждение.
3) Имеется ввиду опять немного другое. По сути атрибуты — хэш-массив со строками, и хранится каждый атрибут в отдельной записи. Именно об этом и речь — что мол накладно выходит.