Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 8 9 10 .. 19   вперед  Ctrl
 Как назвать эту структуру и подход, основанные на EAV?  [new]
drynny
Member

Откуда: Владимир
Сообщений: 210
Есть такой формат хранения данных – EAV (Entity–attribute–value)
И есть его модификация, в которой формат дополнен полем ID – уникальный идентификатор каждой записи:
ID–Entity–Attribute–Value
То есть, это такой большой список из 4 полей, в котором хранится вся база данных. Вообще вся – все сущности и их описания (метаданные), включая описание примитивных типов данных (string, number, date, ...).

Для навигации в этом списке построены 3 упорядоченных указателя – индексы: ID, Entity+Attribute, Attribute+Value
При такой организации данных мы можем работать с базой данных любого размера, не имея проблем с производительностью, свойственных системам, построенным на обычном EAV.

Прошу помочь мне с названием для этой структуры и/или подхода вообще.

Например, мне приходят в головы такие варианты:
IEAV – Indexed EAV или ID–Entity–Attribute–Value (второе не отражает суть подхода, а только структуру)
CREAV – Cross-referenced EAV

Более подробное описание структуры есть здесь: habr.com/ru/company/neoflex/blog/433058/
Как это в итоге работает можно посмотреть тут: habr.com/ru/post/414255/
29 июл 19, 16:43    [21937017]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48463

От того, что ты в структуру EAV добавил дополнительное поле, оно не перестаёт быть EAV.

Posted via ActualForum NNTP Server 1.5

29 июл 19, 16:53    [21937029]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
ldfanate
Member

Откуда:
Сообщений: 145
AEAV наверное (А = Advanced :)
29 июл 19, 17:36    [21937088]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48463

Блин, неужели кто-то наивно полагает, что в "настоящем EAV" у таблицы сущностей нет
суррогатного первичного ключа?..

Posted via ActualForum NNTP Server 1.5

29 июл 19, 17:38    [21937091]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
drynny
Member

Откуда: Владимир
Сообщений: 210
Dimitry Sibiryakov
От того, что ты в структуру EAV добавил дополнительное поле, оно не перестаёт быть EAV.


Структура как была, так и осталась EAV, но мне нужно как-то обозвать получившийся комплекс: структура + подход.
Обычно EAV – только компонент системы, а в моем случае описана вся система: я собираю метаданные и данные из таблицы EAV и из них строю всё, что нужно приложению в плане ORM.
29 июл 19, 17:50    [21937120]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48463

Ну так и называй: "ORM с использованием EAV в качестве хранилища". Или, сокращённо, 1C.

Posted via ActualForum NNTP Server 1.5

29 июл 19, 17:52    [21937127]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
ldfanate
Member

Откуда:
Сообщений: 145
так раз принципиально остался EAV - то и основной минус остался (отвратительная производительность на сколь нибудь больших объёмах).

Вот если например вы хитрые функциональные индексы к этому EAVу начнёте формировать, чтобы только по наиболее часто используемым Attribute (или даже Attr-Value, например, дай мне все материалы с рыночной ценой больше нуля) быстрее формировало, то это ещё можно будет както притянуть "+ подход".
29 июл 19, 17:56    [21937130]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
drynny
Member

Откуда: Владимир
Сообщений: 210
ldfanate
AEAV наверное (А = Advanced :)


Как-то бы хотелось отразить, в чем именно он Advanced.

В идеале вообще отказаться от акронима EAV, например:
SDDM Self-Descriptive data model
или подобное, но было бы наивно думать, что читатель форума будет настолько заморачиваться, чтобы придумывать за меня название.

Поэтому этим я сам заморочусь, а у вас прошу некий emotional kick, стимулирующей критики, издевок и прочего креатива.
29 июл 19, 17:58    [21937131]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
ldfanate
Member

Откуда:
Сообщений: 145
автор
В идеале вообще отказаться от акронима EAV, например:
SDDM Self-Descriptive data model
или подобное


И когда другие говорят "плагиат", я говорю "традиция" (с) :)
29 июл 19, 18:00    [21937135]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
drynny
Member

Откуда: Владимир
Сообщений: 210
ldfanate
так раз принципиально остался EAV - то и основной минус остался (отвратительная производительность на сколь нибудь больших объёмах).


Вот как раз здесь есть некий прогресс: производительность вполне приемлемая при работе с сотнями гигабайт данных или десятками миллионов объектов. Есть куча работающих проектов уже.

Но сейчас дело не в этом, а в придумывании названия.

Спасибо!
29 июл 19, 18:02    [21937138]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48463

ldfanate
основной минус остался (отвратительная производительность на сколь нибудь больших объёмах).

Это миф, созданный теми, кто попытался прогнуть EAV под привычный квадратно-гнездовой
эксель, формируемый одним запросом и, естественно, облажался. Ибо не натягивается эта сова.

Posted via ActualForum NNTP Server 1.5

29 июл 19, 18:03    [21937140]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
ldfanate
Member

Откуда:
Сообщений: 145
наблюдал это сову неоднократно в т.ч. на "взрослых" платформах типа SAP ERP. В итоге там кончается созданием дублирующих плоских таблиц "вторичных индексов", и сложными коммитами в оба места.

Даже если там какаято аппаратная ускорялка на уровне СУБД (типа флэщь + много памяти), всёравно как ни крути, суммарные ресурсы БД на считывание 1 записи из N полей существенно меньше, чем N записей x 1 поле. Плюс усложнение построения специальных индексов (что называется под конкретный отчёт - как правило сводный, квартальный, годовой или подобное, где надо прожевать много всего и по возможности сразу).
29 июл 19, 18:06    [21937148]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
ldfanate
Member

Откуда:
Сообщений: 145
т.е. как правило EAV любят лепить разработчики, которые вместо надлежащей методологической проработки бизнес-процесса и его реализации уповают на "универсальность и гибкость". Получается в итоге "всемирная теория всего", которая столь же универсальна, сколь и толком непригодна, и обрастает постепенно различными прикладными "костылями".
29 июл 19, 18:09    [21937150]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48463

ldfanate
в т.ч. на "взрослых" платформах типа SAP ERP.

"Не боги горшки обжигают."
Эти "серьёзные" платформы тоже делаются людьми с "экселем головного мозга". Ну и Оракул с
его скудным выбором TIL провоцирует.

Posted via ActualForum NNTP Server 1.5

29 июл 19, 18:11    [21937154]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
experience
Member

Откуда: Новосибирск
Сообщений: 154
drynny,

По одной из ваших ссылок мельком зацепил текст:
Тестирование проводилось на самом простом сервере: 1 ядро @2.4GHz, 1GB RAM, диск SSD.
Базы с индексами занимают 207 МБ в классической базе данных и 289 МБ в таблице конструктора.


Если хотите что то тестировать, данные должны в десятки раз превышать размер ОЗУ.
Поверьте моему нику(experience), на моей памяти несколько выброшенных проектов на свалку и уволенных разработчиков именно по причине иллюзий песочницы и песочных же городов.

В первой половине 90х прошлого века мне крутили у виска за стремление к SQL-серверам, ибо дорого. Но тогда ОЗУ моих серверов начиналось с 4-х МЕГАБАЙТ, а данных уже под гигабайт и больше набиралось.
А чуть ранее этого до QUEL Ingres, если бы вы знали как пропатчить adabas что бы ассоциатор разложить по нескольким пакетам в 300-мегабайт, вам бы цены не было.

Сейчас каждый свисток в hdmi телевизора воткнутый может без проблем и малейших усилий мозговых переваривать указанные вами объёмы данных и точно без sql, а путём раскладывания в памяти данных в соответствие с прикладной задачей.

p.s. есть такой недуг современный: SQL - головного мозга.
p.p.s. и да я помню студентов и их преподавателей даже не подозревавших существование этих трёх волшебных букв.
29 июл 19, 18:12    [21937156]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4777
drynny
…. а у вас прошу некий emotional kick, стимулирующей критики...

Фундаментально у вас остается EAV, поскольку главное это логическое. Для БД это тип модели данных.

А индексы, производительность это как бы физические детали.

И вот фундаментальным недостатком EAV является то, что это плохая РМД. Она РМД из-за того, что для структурирования и манипулирования там используются средства РМД: таблицы, реляционные ОЦ, система запросов SQL. Эти средства приспособлены именно для моделирования данных таким способом,что таблицы - про отдельные сущности, а колонки про атрибуты. В этом случае и ОЦ и система достаточно эффективны.
Недостатком РМД является сильная типизированность. Надо затолкать реальный мир в плоские таблицы. Но именно за счет такой типизированности эффективны и ОЦ и язык запросов РМД.

EAV пытается уйти от этих недостатков, сохранив реляционные средства. Но так как средства не для EAV придумывались, они теряют свою эффективность.

Естественный путь уйти от недостатков используя МД с другими средствами структурирования. Например, МД - XML, документные.

А EAV как бы не совсем естественный путь: исковерканная РМД.
29 июл 19, 18:28    [21937171]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
drynny
Member

Откуда: Владимир
Сообщений: 210
experience
drynny,

По одной из ваших ссылок мельком зацепил текст:
Тестирование проводилось на самом простом сервере: 1 ядро @2.4GHz, 1GB RAM, диск SSD.
Базы с индексами занимают 207 МБ в классической базе данных и 289 МБ в таблице конструктора.


Если хотите что то тестировать, данные должны в десятки раз превышать размер ОЗУ.


То, что вы мельком зацепили, это размер одной из самых маленьких форм, просто для сравнения объема. А форм там много.
В начале ветки я упоминал про многогигабайтные базы (сотни ГБ) и сотни миллионов записей, но это не важно.

С высоты вашего опыта, вы наверняка бы могли классифицировать такую штуковину: база данных, хранимая единым списком из 4 полей, проиндексированных в трёх разрезах (ID записи, родитель, тип), из которого собираются метаданные и данные, включая сущности предметной области, запросы, ролевую модель, журналы, настройки и т.д.
29 июл 19, 20:44    [21937237]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
drynny
Member

Откуда: Владимир
Сообщений: 210
vadiminfo
drynny
…. а у вас прошу некий emotional kick, стимулирующей критики...

И вот фундаментальным недостатком EAV является то, что это плохая РМД. Она РМД из-за того, что для структурирования и манипулирования там используются средства РМД: таблицы, реляционные ОЦ, система запросов SQL. Эти средства приспособлены именно для моделирования данных таким способом,что таблицы - про отдельные сущности, а колонки про атрибуты. В этом случае и ОЦ и система достаточно эффективны.


Смешной прикол в том, что на носителе это всё хранится не как таблицы и колонки, а как набор цепочек байтов, порой очень зло фрагментированных (представьте, например, что менеджер дописывает в поле примечания по паре слов ежедневно, и ведь они уже не влезут в отведенное ранее место).
Я не спорю, что собирать такую мозаику из EAV тоже непросто – на порядок сложнее, я бы сказал, но не невыполнимо и даже оправданно для большой доли проектов.
29 июл 19, 22:20    [21937284]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
alecko
Member

Откуда: Башкирия
Сообщений: 553
drynny, я бы добавил ещё одно поле IDP (ID Parents) - ключ родителя (у главного родителя его значение =0)-отвечает за связи...а название... поскольку добавляем Keys: Key-EAV, следовательно KEAV
29 июл 19, 23:39    [21937350]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4777
drynny
Смешной прикол в том, что на носителе это всё хранится не как таблицы и колонки, а как набор цепочек байтов, порой очень зло фрагментированных (представьте, например, что менеджер дописывает в поле примечания по паре слов ежедневно, и ведь они уже не влезут в отведенное ранее место).
.

Вы просили критику. Я написал про логику.

Вот C# для написания клиентских прог лучше подходит, чем ассемблер, несмотря на то, что все хранится в байтах, а там все в битах, и вообще команды компьютеру передаются в 0 и 1.

И БД пришли на смену файловым системам несмотря на байты. И РМД на смену иерархическим и сетевым. Причем в физике она уступала (в производительности). Взяла логикой.

Для БД имеет большое значение логика. Цель БД в идеале, чтобы как можно было проще извлечь требуемую информацию. Чтобы проще было понять модель и проще написать запрос. Требовалось меньше квалификации. А физику на себя пусть в основном СУБД берет.


Может где-то EAV хорош оказался. Обычная РБД там не подошла. Надо было выбирать другой тип МД или остаться в РСУБД, но использовать EAV. И последнее подошло.
30 июл 19, 00:22    [21937369]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
drynny
Member

Откуда: Владимир
Сообщений: 210
alecko
drynny, я бы добавил ещё одно поле IDP (ID Parents) - ключ родителя (у главного родителя его значение =0)-отвечает за связи...а название... поскольку добавляем Keys: Key-EAV, следовательно KEAV


Entity – это и есть Parent ID

Пока в голову приходит только REAV – Relational EAV
Это структурная основа RDBMS, но с фиксированным форматом таблиц
30 июл 19, 10:29    [21937577]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
ldfanate
Member

Откуда:
Сообщений: 145
так всёравно как ни крути, получается "анти-реляционная модель".
В виде схемы данных даже связи по отдельным "Attribute-Справочник значений" или "Attribute-дочерняя таблица" нормально не отобразишь.
31 июл 19, 10:05    [21938564]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
drynny
Member

Откуда: Владимир
Сообщений: 210
ldfanate
так всёравно как ни крути, получается "анти-реляционная модель".
В виде схемы данных даже связи по отдельным "Attribute-Справочник значений" или "Attribute-дочерняя таблица" нормально не отобразишь.


Почему не отобразишь?
Вот пример фрагмента схемы данных, сделанной с применением этого решения.

Картинка с другого сайта.
31 июл 19, 10:38    [21938586]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4838
drynny
vadiminfo
пропущено...

И вот фундаментальным недостатком EAV является то, что это плохая РМД. Она РМД из-за того, что для структурирования и манипулирования там используются средства РМД: таблицы, реляционные ОЦ, система запросов SQL. Эти средства приспособлены именно для моделирования данных таким способом,что таблицы - про отдельные сущности, а колонки про атрибуты. В этом случае и ОЦ и система достаточно эффективны.


Смешной прикол в том, что на носителе это всё хранится не как таблицы и колонки, а как набор цепочек байтов, порой очень зло фрагментированных (представьте, например, что менеджер дописывает в поле примечания по паре слов ежедневно, и ведь они уже не влезут в отведенное ранее место).
Я не спорю, что собирать такую мозаику из EAV тоже непросто – на порядок сложнее, я бы сказал, но не невыполнимо и даже оправданно для большой доли проектов.

А тип поля для Value у вас какой выбран?
1 авг 19, 17:39    [21940097]     Ответить | Цитировать Сообщить модератору
 Re: Как назвать эту структуру и подход, основанные на EAV?  [new]
drynny
Member

Откуда: Владимир
Сообщений: 210
Megabyte
drynny
пропущено...


Смешной прикол в том, что на носителе это всё хранится не как таблицы и колонки, а как набор цепочек байтов, порой очень зло фрагментированных (представьте, например, что менеджер дописывает в поле примечания по паре слов ежедневно, и ведь они уже не влезут в отведенное ранее место).
Я не спорю, что собирать такую мозаику из EAV тоже непросто – на порядок сложнее, я бы сказал, но не невыполнимо и даже оправданно для большой доли проектов.

А тип поля для Value у вас какой выбран?


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

Данные можно преобразовать к тому виду, в котором они хранятся, чтобы использовать индекс.
Затруднение вызывает только применение индекса к диапазону чисел, потому что у них различается порядок — нельзя ранжировать по первым цифрам, нужно считать всё число.

Картинка с другого сайта.
1 авг 19, 19:04    [21940141]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 8 9 10 .. 19   вперед  Ctrl
Все форумы / Проектирование БД Ответить