powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / EAV vs SQL Server Sparse columns
35 сообщений из 35, показаны все 2 страниц
EAV vs SQL Server Sparse columns
    #38524946
Есть схема и приложение написанное по принципу EAV. Надоело писать join'ы при выколупывании значений колонок строк. Хочется вывернуть EAV в строки + подрихтовать существующие метаданные под новую схему. Строки будут состоять из sparse columns + column set.

Попробовал уже вывернуть в строки. Поигрался с типичными запросами, которые вертятся в системе, для EAV и для row+Sparse Columns случая. Те же яйца только в профиль по производительности (копейки).

Как считаете стоит ли заморачиваться с переехдом?
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38524990
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще будет научится писать запросы для EAV без излишних джоинов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38524994
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мимокрокодил0001Надоело писать join'ы при выколупывании значений колонок строк. Напишите вьюху
мимокрокодил0001 Те же яйца только в профиль по производительностиТо бишь достать одну строку, стоит ровно столько сколько собрать ту же строку из нескольких колонок. Ну так добавьте тестовых данных побольше.
мимокрокодил0001Как считаете стоит ли заморачиваться с переехдом? Производительность не единственное больное место у EAV.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525014
SERG1257,

Вьюху... Для чего-то написано, для чего-то нет.

Там структура такая таблица строк древовидная, строка - узел дерева, структура каждого узла разная, колонки значений в другой. На этом планируют строить документооборот с версионностью. У меня от этого муражки по ж... коже.

SERG 1257. по поводу добавить больше тестовых данных. тестировал пока только типовой запрос - достать строки:

1) row_table join value_table
2) row_table join LOOKUP row_table

разница по логическим чтениям не существенна была.

2-й случай спомощью include можно свести к очень мизерному количеству логичечских чтений. да и первый точно также, так как надо получить в данном запросе только значения колонок строки.

ps. берет печаль, от документооборота. уже есть с чем сравнить - дата документа в поле value, шапка в поле value, табличная часть тамже. выколупать по дате документ или составить отчет за период времени - одно удовольствие.

система досталась по наследству. с EAV в первые. целка порвана в щи.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525021
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если уж жизнь не мила без колоночного представления данных, открой для себя PIVOT (если он
там в MS есть конечно же).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525022
Dimitry Sibiryakov,

:)
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525023
вбрасываю инфу для сочувствующих.

вангую запросы вида:

(col1 > '5' or col10 < 78) and col100 like 'xxx%' and ...

я еще понимаю когда заиндексировать для одной сущности.

но когда в одну таблицу свалены все сущности (не важно одна колонка value или 100) и эти колонки используются по разному, это же ж%па. как с этим боритесь вы?
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525030
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мимокрокодил0001тестировал пока только типовой запрос - достать строки:Ну одну строку по айди действительно достать быстро где угодно.

мимокрокодил0001вангую запросы вида:
(col1 > '5' or col10 < 78) and col100 like 'xxx%' and ...Теперь ты узнаешь что такое боль
И это не лечится ничем кроме параллельной структуры

Второй недостаток в том что при eav никак не получится навесить на СУБД скучные проверки типа название поля, таблицы, тип поля, ссылочную целостность и т.д. т.п. То бишь там где в традиционной структуре ты получишь ошибку СУБД, в eav это будет обязанность программиста.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525031
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мимокрокодил0001запросы вида:

(col1 > '5' or col10 < 78) and col100 like 'xxx%' and ...
В условиях EAV они превращаются в запросы вида
Код: sql
1.
2.
3.
(Attr = 'Col1' and IntVal > 5) or
(Attr = 'Col10' and IntVal < 78) or
(Attr = 'Col100' and StrVal like 'xxx%') or ...


По-моему индексирование таблицы для таких запросов очевидно. Вам нет?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525035
SERG1257мимокрокодил0001вангую запросы вида:

(col1 > '5' or col10 < 78) and col100 like 'xxx%' and ...Теперь ты узнаешь что такое боль
И это не лечится ничем кроме параллельной структуры



имеете ввиду рядом дополнительно к eav для сущностей создавать таблицы, физическая структура которых отражает логическую структуру сущностей, а эти таблицы уже индексировать и писать custom код для этого больного места?
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525036
Dimitry Sibiryakovмимокрокодил0001запросы вида:

(col1 > '5' or col10 < 78) and col100 like 'xxx%' and ...
В условиях EAV они превращаются в запросы вида
Код: sql
1.
2.
3.
(Attr = 'Col1' and IntVal > 5) or
(Attr = 'Col10' and IntVal < 78) or
(Attr = 'Col100' and StrVal like 'xxx%') or ...


По-моему индексирование таблицы для таких запросов очевидно. Вам нет?..


а мне нет (мы друг друга не поняли?).

но такое есть

create index (id_client, id_grp, id_row, id_attr, value_checksum) include(value), где value nvarchar(max)
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525038
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именно так ибо вот этот конкретный запрос надо ускорять, а переписывать всю систему слишком дорого.
В итоге эта супергибкая система существует только рядом с совсем не гибкими костылями.

У EAV есть своя ниша определяемых пользователям дополнительных свойств, в которой недостатки незаметны, а преимущества неоспоримы.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525041
SERG1257Именно так ибо вот этот конкретный запрос надо ускорять, а переписывать всю систему слишком дорого.
В итоге эта супергибкая система существует только рядом с совсем не гибкими костылями.

У EAV есть своя ниша определяемых пользователям дополнительных свойств, в которой недостатки незаметны, а преимущества неоспоримы.

спасибо вам, добрый человек. пойду погружусь в небытие.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525053
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> У EAV есть своя ниша

Две ниши. Основная - временный коллектор. Менее очевидная - хранение конфигов. Никаких "определяемых пользователями дополнительных свойств" в базе данных по определению быть не должно. Метки - сколько угодно, но это не свойства.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525054
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621 Основная - временный коллектор.В целях уменьшения взаимонепонимания, добавьте пару строчек поясняющих этот термин.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525064
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> пару строчек

Штатная процедура, примерный регламент которой вы и описали. Есть некая сущность, представления о которой с течением времени расширяются. Для накопления статистики предпочтительного описания свойств этой сущности и используется структура типа атрибут - значение. Достаточно очевидно это работает в случае, если характеристика принимает семантические значение. Менее очевидно, если численные или связанные. Накопили варианты - преобразовали в обычные свойства, подчистили таблицу атрибутов - значений. Это не пользовательские данные в том смысле, что пользователи имеют возможность влиять на них очень небольшой промежуток времени, гораздо меньший, чем жизненный цикл сущности. Временный коллектор.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525068
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, это именно то, что я подразумевал как "определяемые пользователями дополнительные свойста" - времянка, заплатка, "сопля", но которая здесь и сейчас и ввод которой точно не задевает другие части системы (в отличие от новой версии от вендора)
С конфигами согласен.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525072
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621Накопили варианты - преобразовали в обычные свойства, подчистили
таблицу атрибутов - значений
А зачем? Только чтобы уложить картину в привычный квадратно-гнездовой метод набора
фиксированных кортежей? Мыслить в терминах множеств это ведь так трудно с непривычки...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525075
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov А зачем?Чтобы добавить производительности и целостности.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525077
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> А зачем?

Затем, что сложно проектировать и поддерживать логически безупречные структуры. Затем, что существуют альтернативные корректные модели, которые можно совмещать или на которые можно забить. Энергопотребление бытового устройства вы можете указать числом или классом. Государство вы можете поделить административно-территориально, экономически, этнически, климатически и пр.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525218
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621Накопили варианты - преобразовали в обычные свойства, подчистили таблицу атрибутов - значений.
Некому преобразовывать - система отчуждена и находится на сопровождении конечного пользователя.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525288
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Некому преобразовывать - система отчуждена и находится на сопровождении конечного пользователя.

Варианты трансформации базы данных в мусорную кучу не интересны.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525420
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621Варианты трансформации базы данных в мусорную кучу не интересны.
ЕАV изначально мусорная куча. Но в процессе ее эксплуатации она не становится более мусорной.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525504
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> в процессе ее эксплуатации она не становится более мусорной

Становится. Более того, это типичный путь деградации базы данных.

Дело даже не в скорости обработки кучи мусора, память и процессоры уже неприлично дёшевы, а в отсутствии эволюции представлений о внешнем мире. Фишка в том, что вы почти всегда вынуждены пользоваться упрощениями. Вчера вы полагали нечто функционально законченным и обладающим некоторыми признаками. Сегодня вы научились различать его структурные компоненты уже со своими признаками, которые не обязательно линейно связаны с предыдущим представлением. В общем случае ваша аналитика будет ограничена текущими представлениями, ваша работа до вчерашнего дня - коту под хвост. И чем больше изменений, тем хуже качество данных.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525593
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надоело писать join'ы при выколупывании значений колонок строкМожно сделать функцию, кот. по набору параметров-ключей вернёт нужное значение.

Запросы упростятся раз в 10. На больших выборках немного упадет производительность.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525602
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621 И чем больше изменений, тем хуже качество данных.
Не согласен. Особенностью EAV является неухудшение качества (хуже некуда) при изменениях. Ведь сам контейнер не меняется, меняется только начинка. Обычная рел. БД при изменениях становится хуже и требуется периодический реинженииринг.
зы ессно новое заменяет старое , но это не зависит от EAV. В EAV даже можно как-то сохранить старую структуру.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525677
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> сам контейнер не меняется, меняется только начинка

Именно. И чем дальше, тем сильнее представление может отставать от реальности.

> Обычная рел. БД при изменениях становится хуже и требуется периодический реинженииринг.

Она не становится хуже, это естественный процесс, так и должно быть. Разница в том, что вы имеете штатную регулярную процедуру изменения структуры данных. Контролируемую. С предсказуемыми результатами.

> это не зависит от EAV

У меня нет необходимости убеждать вас в очевидных для меня вещах. Хотите ходить по граблям - на здоровье, меня это не беспокоит.

Вы описываете достаточно широко распространённый подход, камуфлирующий криворукость разработчиков. Криворукость следует не маскировать, а выявлять и заставлять платить за неё баблом и/или репутацией. Никак иначе.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38525888
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621Именно. И чем дальше, тем сильнее представление может отставать от реальности.
Оно не может отставать по определению - оно всегда соотв. текущим потребностям пользователя.
guest_20040621Она не становится хуже, это естественный процесс, так и должно быть.
А совместимость со старыми программами ? Процесс деградации БД - это действительно естественный процесс.
guest_20040621Вы описываете достаточно широко распространённый подход, камуфлирующий криворукость разработчиков.
Не очень уж распространенный. Для себя да, делают многие, а для конечного пользователя - нет.
Для этого надо иметь очень прямые руки.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38526250
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> сам контейнер не меняется, меняется только начинка

Именно. И чем дальше, тем сильнее представление может отставать от реальности.

> Обычная рел. БД при изменениях становится хуже и требуется периодический реинженииринг.

Она не становится хуже, это естественный процесс, так и должно быть. Разница в том, что вы имеете штатную регулярную процедуру изменения структуры данных. Контролируемую. С предсказуемыми результатами.

> это не зависит от EAV

У меня нет необходимости убеждать вас в очевидных для меня вещах. Хотите ходить по граблям - на здоровье, меня это не беспокоит.

Вы описываете достаточно широко распространённый подход, камуфлирующий криворукость разработчиков. Криворукость следует не маскировать, а выявлять и заставлять платить за неё баблом и/или репутацией. Никак иначе.

Какой Вы, батенька, ... суровый. Только так, и никак иначе!
Задачи разные бывают. И говорить, что EAV - это черное, а sparse columns - белое, неправильно. Есть масса оттенков.
Взять систему АСУТП и Industrial SQL. На мой взгляд, чистое EAV.
Все данные в одной таблице с колонками:
- тэг (это одновременно идентификатор объекта и его конкретного атрибута);
- время;
- значение.
И ничего, задачи АСУТП решаются быстро и красиво.

А вот "штатная регулярная процедура изменения структуры данных" меня удивила. Я с таким не сталкивался. Интересно, для
каких задач такой жизненный цикл применяется?

к ТС:
Ценность Вашего индекса
авторcreate index (id_client, id_grp, id_row, id_attr, value_checksum) include(value), где value nvarchar(max)
трудно оценить не зная, что означает id_client, id_grp, id_row.
Может быть индекс авторcreate index (id_attr, value).... ускорит Ваши запросы, а может нет.

Вам советовали использовать функцию типа
Function GetValue(id_client, id_grp, id_row, id_attr)
...
return value.
Она действительно облегчит написание запросов, но только, если на value не накладывается условий.
Т.е.
select GetValue(1,2,3,4) as field1,
GetValue(5,12,4,11) as field2,
.... и т.д.
Но не
where GetValue(1,2,3,4) >100 and ....

Хотел посоветовать написать генератор запросов :), но сам предпочитаю копи-паст в такой ситуации.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38526369
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видите ли, DirksDR, в чём дело: у _мод была репутация, которая не позволила более определённо квалифицировать его точку зрения. Для того, чтобы иметь возможность изредка тупить, эту репутацию вам нужно сначала заработать.

Про разные задачи вы будете рассказывать тем, кому это интересно. В данном случае - "...EAV - это черное, а sparse columns..." - вы даже не поняли предмета обсуждения.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38530432
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторУ EAV есть своя ниша определяемых пользователям дополнительных свойств, в которой недостатки незаметны, а преимущества неоспоримы.



Про АСУТП не зря припомнили. В точку. Все при деле, но АСУ сама по себе, а ТП, нередко даже без документации, само по себе. И все на зарплате и прибыль даже есть чтобы с банком рассчитаться и взять новый кредит.

Ни при каких обстоятельствах пользователь не может добавить атрибут без согласования с инженером, а инженер не может добавить атрибут без согласования с начальством. Это в том числе входит в культуру пользования базами данных. Если каждая творческая единица начнет свои атрибуты плодить, инженер начнет вешаться на каждой осине по дороге на службу.

Это вам не природа с четырьмя кислыми буквами. У нас столько времени нет чтобы миллиард лет забивать четыре столбца хламом в надежде что они когда-нибудь заговорят по-русски.

Другими словами если вы хотите успешно скрывать от начальства свою бесполезность - EAV наилучшее решение.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38530689
DDirks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
deblogger

Ваши аргументы могут относиться к самым разным системам, EAV тут не виновато.
EAV не предполагает, что "каждая творческая единица начнет свои атрибуты плодить", естественно, это делается централизовано службой сопровождения ИС.
Так же, как и в любой другой ИС.
Просто, в случае EAV это делается легче и быстрее.
Об этом много говорилось на этом форуме, нет смысла повторяться.

guest_20040621

Вы считаете, что Ваша черно-белая классификация есть истина в последней инстанции? Не вижу смысла спорить.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38530781
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDirks,

EAV предполагает что не придется проектировать БД. Ради чего собственно весь сыр-бор.

Кого вы хотите обмануть? Вы же все программисты. Вам в стопицот раз проще написать туеву хучу процедур чем ломать голову над отношениями.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38531137
DDirks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
debloggerDDirks,

EAV предполагает что не придется проектировать БД. Ради чего собственно весь сыр-бор.

Кого вы хотите обмануть? ...

Ну, почему не придется проектировать? Просто метаданные описываются не средствами СУБД, а в таблице(ах) базы ИС.
Это так, к слову.
Я не рассматриваю EAV как альтернативу традиционной структуре БД, а как дополнение.
В нашей службе техподдержки производственных задач на обслуживании несколько программных комплексов, в каждом
несколько сотен обычных таблиц и по 2-3, построенных по принципу EAV.
Кроме того занимаюсь сбором информации с серверов АСУТП в единую базу диспетчерской системы.
Системы АСУТП (около 40 шт) самые разные, но большинство построено по принципу EAV, потому что здесь это оправдано. Сотни разнообразных технолгических объектов, у каждого десятки атрибутов - эта задача как раз для EAV.
Я никого не хочу обмануть, однако считаю, что уместное применение EAV полезно.
...
Рейтинг: 0 / 0
EAV vs SQL Server Sparse columns
    #38531142
DDirks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
debloggerDDirks,

EAV предполагает что не придется проектировать БД. Ради чего собственно весь сыр-бор.

Кого вы хотите обмануть? ...

Ну, почему не придется проектировать? Просто метаданные описываются не средствами СУБД, а в таблице(ах) базы ИС.
Это так, к слову.
Я не рассматриваю EAV как альтернативу традиционной структуре БД, а как дополнение.
В нашей службе техподдержки производственных задач на обслуживании несколько программных комплексов, в каждом
несколько сотен обычных таблиц и по 2-3, построенных по принципу EAV.
Кроме того занимаюсь сбором информации с серверов АСУТП в единую базу диспетчерской системы.
Системы АСУТП (около 40 шт) самые разные, но большинство построено по принципу EAV, потому что здесь это оправдано. Сотни разнообразных технолгических объектов, у каждого десятки атрибутов - эта задача как раз для EAV.
Я никого не хочу обмануть, однако считаю, что уместное применение EAV полезно.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / EAV vs SQL Server Sparse columns
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]