14 июня 2016 г. 17:55

185

EAV альтернатива в виде MongoDB

В предыдущей статье , мы реализовали каталог товаров с переменным набором свойств используя паттерн проектирования EAV(Entity-Value-Product).Но для реализации данной задачи нам пришлось добавить несколько таблиц , но и это не позволило нам решить полностью проблему , так как значения могут быть разного типа. Достаточно , посмотреть на структуру таблиц в популярном интернет-движке Magento, который реализует паттерн EAV. Но за это приходиться дорого платить , когда мы делаем запросы на фильтрацию и выборку данных,так как нам приходиться писать запросы с объединением таблиц.

Но благодаря NoSql решениям ,добавление динамических аттрибутов различным сущностям становиться тривиальной задачей. Рассмотрим это на примере MongoDB . которая является довольно популярным NoSQL решением благодаря в легкости в изучении.

Как следует из википедии , MongoDB - это документо-ориентированнаясистема управления базами данных (СУБД) с открытым исходным кодом, не требующая описания схемы таблиц.

Данные в MongoDb хранятся в документах , которые представлены JSON-подобной структуре. А документы объединяются в коллекции. Если брать аналогию с реляционными базами данных . то коллекции - это таблицы, а документы - это строки. Но это искусственное сравнение и больше служит для понимания сути .А вот документы в свою очередь состоят из полей , которые представлены в json-подобной структуре.

В отличие от таблиц в реляционных базах данных коллекции в MongoDb не нуждаются в схеме и поэтому в любом документе о товаре , мы можем уместить произвольное количество динамических аттрибутов

comments powered by Disqus