Международная конференция разработчиков
и пользователей свободного программного обеспечения

Использование архитектуры EAV в Opensource-проектах

Виталий Сороко, Гродно, belarus

LVEE Winter 2016

Entity–attribute–value model (EAV) is a very flexible data model used in various open source projects. This data model has many advantages and disadvantages so it is not suitable for wide application. But sometimes it is highly recommended to use EAV in design and development process. Cases are decribed, in which it is preferable to use EAV data model. EAV is completely compared with the standard relational data model and some examples of successfully integration EAV in ready-to-use open source solutions are given.

Entity–attribute–value model (EAV) – это модель данных, которая благодаря использованию сущностей, атрибутов и их значений обеспечивает большую гибкость при создании новых данных. Это означает, что при создании нового типа товара в интернет магазине нет никакой необходимости создавать новые таблицы и поля в базе данных. Более того благодаря использованию этой модели данных можно с лёгкостью создать один товар из нескольких уже существующих (например «подарочный набор»). Тем не менее использование модели EAV не ограничивается только интернет магазинами: некоммерческая организация Apache Software Foundation использует её в проекте Apache UIMA, а некоторые системы баз данных, такие как InfinityDB, изначально имеют поддержку модели данных EAV.

Общая схема EAV в виде трёх таблиц

Тем не менее у модели данных EAV, как и у всех других моделей данных, есть свои преимущества и недостатки и это в некоторых случаях ограничивает возможность использования данной модели.

Главными плюсами модели данных EAV являются:
1. Гибкая и универсальная структура данных (можно менять количество свойств без изменения полей в таблицах);
2. Относительная простота при добавлении или изменении характеристики товара;
3. При правильной реализации избыточность данных почти отсутствует.

Основные минусы EAV:
1. Для вставки данных обычно используется несколько запросов;
2. Не очень быстрая выборка данных в случае реализации с большим количеством таблиц и высокая нагрузка на сервер при больших объемах данных в связи с невозможностью применения стандартных способов индексации;
3. Иногда возникают трудности в обеспечении целостности данных.

В настоящее время модель данных EAV используется в таких Opensource проектах как Magento Community Edition, EAV-Django и др. Необходимо отметить, что модель данных EAV не получила очень широкого распространения не только из-за своих технических минусов, но также в результате её неполного понимания со стороны разработчиков. Как правило только те, кто разобрался с принципом работы этой модели и попробовал её в реальной среде, могут объективно судить о её преимуществах и недостатках, а также рекомендовать её к использованию в той или иной ситуации и именно поэтому, очень важно полностью понять основные принципы организации её работы. В упрощённом виде реализация модели EAV может быть в виде двух или трех таблиц (см. рис.1 и рис.2).

Простейшая реализация EAV в виде двух таблиц

Однако в реальных проектах реализация обычно сложнее, и на то есть определенные причины, такие как оптимизация скорости обработки запросов и уменьшение общего количества записей в таблицах.Так, например, в Magento CMS CE для реализации данной модели используется больше десятка таблиц. Как вы могли узнать из описание недостатков выше, иногда гибкость может трансформироваться в падение производительности всей системы. Тем не менее, в настоящее время уже разработаны различные способы решения этой проблемы. Итого, главная рекомендация по применению следующая: EAV рекомендуется использовать только исходя из плюсов, а именно в случаях если характеристики для товаров очень динамичны и часто изменяются и вы не ограничены в серверных ресурсах.

Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license

Назад