Использование архитектуры EAV в Opensource-проектах
LVEE Winter 2016
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
Back