|
|
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
Ребят, привет! А вот изжил ли Entity-Attribute-Value (EAV) с приходом NoSQL? Вот смотрите, раньше, если нужно было обеспечить клиентов продуктом, где схема данных заранее неизвестна и должна конфигурироваться в рантайме администратором системы, то EAV был единственным вариантом. Сейчас же появились NoSQL решения. Они вроде как-то предполагают гибкую модель данных. Собственно, есть ли смысл еще в EAV поверх реляционной БД, раз есть NoSQL? В чем преимущества EAV перед NoSQL и когда его имеет смысл использовать? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 23:28 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
VetalСобственно, есть ли смысл еще в EAV поверх реляционной БД, раз есть NoSQL? Нет, нету. Все на Носиквел! Самое восхитительное на носиквеле это то, что никто, кто ушёл туда - ещё не вернулся чтобы рассказать об ощущениях. Видимо, умирают от экстаза. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2014, 23:40 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
Vetal, дружище, на конкурсе идиотских вопросов вы бы безоговорочно заняли первое место. Сконструировать вопрос только из фейков - это несомненный успех. Куда катится этот мир... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2014, 01:57 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
Дмитрий, а если серьезно? Я вот лично не вижу для себя особых преимуществ от EAV по сравнению с лучшими NoSQL решениями? Но очень нужно найти :) Я понимаю, оно прикольно поиздеваться над человеком, который не знает, но если знаете, можно все же ответить по теме? guest_20040621, объясните, пожалуйста, почему вопрос идиотский и где фейки? Можно ответить по сути? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 03:17 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
Vetalесли нужно было обеспечить клиентов продуктом, где схема данных заранее неизвестна и должна конфигурироваться в рантайме администратором системы, то EAV был единственным вариантом.Чем EAV в этом отношении лучше чем упрощенное, грубо говоря, средство разработки БД? Допустим, сделал я конфигуратор, который хранит метаданные, умеет добавлять/удалять поля и таблицы и составлять sql-запросы. Чем это хуже EAV? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 07:33 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
Картинка из соседнего топика: разве может настраивать только атрибут сущности в eav, но не поле таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 07:40 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
> объясните, пожалуйста Пожалуйста. Фейк номер раз - "гибкая модель данных". Это маскировка криворукости и кривоголовости, а не особенности структуры данных. Фейк номер два - противопоставление NoSQL и РСУБД. Это примерно то же самое, как сравнивать тёплое и мягкое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 10:11 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
VetalЯ вот лично не вижу для себя особых преимуществ от EAV по сравнению с лучшими NoSQL решениями? Но очень нужно найти Не нужно. Используй носкуль. Потом вернёшься и расскажешь как оно у тебя работает. Будешь первым. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 11:38 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
VetalДмитрий, а если серьезно? Я вот лично не вижу для себя особых преимуществ от EAV по сравнению с лучшими NoSQL решениями? Но очень нужно найти :) EAV плохо поддерживает ссылочные данные, но NOSQL (как минимум то что видел) - еще хуже :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 11:51 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
ГхостикVetalесли нужно было обеспечить клиентов продуктом, где схема данных заранее неизвестна и должна конфигурироваться в рантайме администратором системы, то EAV был единственным вариантом.Чем EAV в этом отношении лучше чем упрощенное, грубо говоря, средство разработки БД? Допустим, сделал я конфигуратор, который хранит метаданные, умеет добавлять/удалять поля и таблицы и составлять sql-запросы. Чем это хуже EAV?Тем, что "добавляет/удаляет поля и таблицы". И рано или поздно, но по "живым" данным... Ошибка в метаданных... Случайно(!) подсунули "не ту конфигурацию"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 12:12 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинEAV плохо поддерживает ссылочные данные,Не намного хуже, чем любая "стандартная" схема - просто добавьте "V со ссылкой"... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 12:14 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
sphinx_mvКот МатроскинEAV плохо поддерживает ссылочные данные,Не намного хуже, чем любая "стандартная" схема - просто добавьте "V со ссылкой"... А ссылочная целостность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 12:27 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
sphinx_mvГхостикпропущено... Чем EAV в этом отношении лучше чем упрощенное, грубо говоря, средство разработки БД? Допустим, сделал я конфигуратор, который хранит метаданные, умеет добавлять/удалять поля и таблицы и составлять sql-запросы. Чем это хуже EAV?Тем, что "добавляет/удаляет поля и таблицы". И рано или поздно, но по "живым" данным... Ошибка в метаданных... Случайно(!) подсунули "не ту конфигурацию"... 1. Бэкапы никто не отменял 2. Удаление можно и "логическое" сделать 3. В EAV удалить поле с данными ничуть не сложнее, и испортить их накатом скрипта для неверной версии тоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 12:29 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинsphinx_mvпропущено... Не намного хуже, чем любая "стандартная" схема - просто добавьте "V со ссылкой"... А ссылочная целостность?А кто сказал, что для "E" нельзя сделать "А", "V" которого ссылается на другое "E"? С декларативной ссылочной целостностью... И вообще можно хранить строго типизированные данные... Схема усложнится, но можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 12:51 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
Гхостикsphinx_mvпропущено... Тем, что "добавляет/удаляет поля и таблицы". И рано или поздно, но по "живым" данным... Ошибка в метаданных... Случайно(!) подсунули "не ту конфигурацию"... 1. Бэкапы никто не отменялНадеюсь, Вы в курсе, сколько времени может занимать восстановление базы данных из бэкапа? И Вы в курсе, что все это время база физически не доступна ? Гхостик2. Удаление можно и "логическое" сделатьНу, и чем это отличается от EAV при изменении метаданных его модели? Гхостик3. В EAV удалить поле с данными ничуть не сложнее, и испортить их накатом скрипта для неверной версии тожеНет необходимости физического удаления стрруктур и данных в EAV. Изменить и восстановить модель проще, чем поднимать бэкап. И работать с несколькими разными версиями моделей в EAV можно одновременно - на одном наборе дланных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 13:02 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинsphinx_mvпропущено... Не намного хуже, чем любая "стандартная" схема - просто добавьте "V со ссылкой"... А ссылочная целостность?Никогда не понимал, зачем нужна СЦ. Эта фича бесполезна и больше мешает, чем помогает. Вставку/удаление (в т .ч. логическое) нужно делать процедурой, кот. сначала проведет сто проверок и только потом удалит или спрячет. Или выдаст внятное сообщение о причине невыполнения. СЦ тормозит. Дико мешает перезаливать данные (иногда это нужно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 13:05 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
sphinx_mvКот Матроскинпропущено... А ссылочная целостность?А кто сказал, что для "E" нельзя сделать "А", "V" которого ссылается на другое "E"? С декларативной ссылочной целостностью.... Кто ее поддерживать будет - некое промежуточное API? А оптимизатор эту "декларативную ссылочную целостность" использовать будет? Это и называется "поддерживается плохо". Смотрите мое первое сообщения - я там как раз говорю, что в EAV можно хранить ссылочные данные, но криво и через задницу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 13:19 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
> Надеюсь, Вы в курсе, сколько времени может занимать восстановление базы данных из бэкапа? > И Вы в курсе, что все это время база физически не доступна ? Это не аргумент за EAV. Потому что и в ней рестор меньше времени не займет. > Ну, и чем это отличается от EAV при изменении метаданных его модели? Ничем. Значит, это не аргумент в пользу EAV. >Нет необходимости физического удаления стрруктур и данных в EAV. Нет необходимости удаления таблиц и полей и в реляционной схеме тоже. Ненужные поля делаются nullable, и в таблице метаданных проставляется признак неактуальности начиная с текущей версии. > И работать с несколькими разными версиями моделей в EAV можно одновременно - на одном наборе дланных. Вот поддержка на уровне СУБД . Поддержка ручками - что в реляционной, что в EAV схеме будет представлять примерно одинаковую сложность. А аргументы против EAV есть - это худшая производительность и сложность написания запросов по сравнению со стандартной реляционной схемой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 13:22 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
> Вставку/удаление (в т .ч. логическое) нужно делать процедурой, кот. сначала проведет сто проверок и только потом удалит или спрячет. Или выдаст внятное сообщение о причине невыполнения. Проблема в том, что удаление/изменение может вестись из разных мест. В одном месте сделали все проверки, а во втором забыли. Внешний ключ не зависит от человеческого фактора - от него не уйдешь и не забудешь. > СЦ тормозит. Дико мешает перезаливать данные (иногда это нужно). Если есть кривые данные, которые надо залить, можно влить их в промежуточную таблицу без fk, и по мере разбирательства переливать в боевую. Иметь же кривые данные в боевых таблицах - это бомба замедленного действия, заложенная для самого себя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 13:27 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинsphinx_mvпропущено... А кто сказал, что для "E" нельзя сделать "А", "V" которого ссылается на другое "E"? С декларативной ссылочной целостностью.... Кто ее поддерживать будет - некое промежуточное API?Ну, и какое "промежуточное АПИ" поддерживает на любом современном SQL-сервере FOREIGHN KEY ?! EAV всего лишь очень сильно нормализованные данные, а на то, до какой степени данные нормализованы (или вообще никак не нормализованы) любому SQL-серверу должно быть сугубо "с высокой колокольни". В середине 2010-х SQL-сервер должен уметь поддерживать внешние ключи - и уметь это делать хорошо . Кот МатроскинА оптимизатор эту "декларативную ссылочную целостность" использовать будет?Назначение ограничений ссылочной целостности не в том, чтобы ее "использовал оптимизатор", а в том, чтобы не допускать вставку в соответствующее поле неверных значений ключа. Кот МатроскинЭто и называется "поддерживается плохо". Смотрите мое первое сообщения - я там как раз говорю, что в EAV можно хранить ссылочные данные, но криво и через задницу.Интересная "задница"... :) Как повесить FOREIGHN KEY между двумя "обычными" таблицами в "обычной" сжеме - то "ничего страшного"... Но как сделать то же самое в EAV - так сразу "фобос и деймос" (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 14:09 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
sphinx_mv, чтобы сделать обсуждение более предметным - можно пример EAV-схемы с возможностью использования стандартных foreign key в атрибутах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 14:18 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
Гхостик> Надеюсь, Вы в курсе, сколько времени может занимать восстановление базы данных из бэкапа? > И Вы в курсе, что все это время база физически не доступна ? Это не аргумент за EAV.Это - аргумент против Вашего предложения по изменениям модели ребилдить схему данных. ГхостикПотому что и в ней рестор меньше времени не займет.Займет! :) В EAV "необходимо и достаточно" восстановить/наложить на существующие данные только старую/новую схему данных. Гхостик> Ну, и чем это отличается от EAV при изменении метаданных его модели? Ничем. Значит, это не аргумент в пользу EAV.Вы слегка запутались: это был Ваш аргумент в пользу жесткого ребилда схемы. И этот Ваш аргумент оказался немножко бесполезным... Гхостик>Нет необходимости физического удаления стрруктур и данных в EAV. Нет необходимости удаления таблиц и полей и в реляционной схеме тоже. Ненужные поля делаются nullable, и в таблице метаданных проставляется признак неактуальности начиная с текущей версии.Во-первых, "на-лицо" - завязка на вендора... Во-вторых, с "движением вперед" - все более/менее понятно. Но как быть с "движением назад"? Гхостик> И работать с несколькими разными версиями моделей в EAV можно одновременно - на одном наборе дланных. Вот поддержка на уровне СУБД . Поддержка ручками - что в реляционной, что в EAV схеме будет представлять примерно одинаковую сложность.Когда-то давно под очень сильным впечатлением от статей Анатолия Тенцера примерно за два с половиной месяца я "нарисовал" на MSSQL EAV-хранилище. С пользовательским интерфейсом... С возможностью версионирования схемы... С разграничением прав пользователей как на типы сущностей, так и на отдельные атрибуты типов... С наложением и суперпозицией типов сущностей - сущность одного типа можно было отмапить в другой тип просто указав идентификатор целевого типа... Реализация была готова к включению в релиз, но "контора накрылась"... ГхостикА аргументы против EAV есть - это худшая производительность и сложность написания запросов по сравнению со стандартной реляционной схемой."Худшая производительность" и "сложность написания запросов" при нынешнем тотальном увлечении ORMами - это ну, очень весомо... Во-вторых, только полный (цензура) будет использовать EAV для чего-нибудь еще, кроме хранения редко меняющихся данных. Ну, а переписывать весь DAL после изменения "стандартной реляционной схемы" - это несказаемо "сексуально"! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 14:36 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинчтобы сделать обсуждение более предметным - можно пример EAV-схемы с возможностью использования стандартных foreign key в атрибутах?"Рисовать" не буду, но "расскажу" в двух словах: в "стандартном EAV" добавить в метаданные для атрибутов признак "ссылочный", а в данных еще одну "value"-таблицу, имеющую ссылку (внешний ключ) "значимого" поля на ключ в "entity" - вроде бы очевидное решение... Про "одинаковость" типа данных полей для создания внешнего ключа, думаю, упоминать нет необходимости? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 14:49 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
LSVКот Матроскинпропущено... А ссылочная целостность?Никогда не понимал, зачем нужна СЦ . Эта фича бесполезна и больше мешает, чем помогает. Вставку/удаление (в т .ч. логическое) нужно делать процедурой , кот. сначала проведет сто проверок и только потом удалит или спрячет. Или выдаст внятное сообщение о причине невыполнения.Главное, что Вы принципиально не возражаете, против необходимости поддерживать ссылочную целостность. Но процедуру , которая это будет делать, сначала нужно написать - в отличие от декларативной поддержки ссылочной целостности. К тому же, в следствие особенностей по-командного выполнения запросов в процедуре результат такого контроля может давать неадекватные результаты: между разными даже последовательными командами походит некоторое время, в течение которого в параллельной сессии данные могут оказаться уже измененными и не соотвествовать результатам проверки, выполненные в текущей сессии. LSV СЦ тормозит . Дико мешает перезаливать данные (иногда это нужно).Потому и нужно внимательно думать, где это действительно необходимо и как это оптимизировать. Ну, а для перезаливки всегда можно использовать больше одного спрособа загрузки данных. И самый простой из них - временное отключение консрэйнтов на период заливки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 15:02 |
|
||
|
Если нужна гибкая схема данных: Entity-Attribute-Value (EAV) или NoSQL?
|
|||
|---|---|---|---|
|
#18+
sphinx_mvа в данных еще одну "value"-таблицу, имеющую ссылку (внешний ключ) "значимого" поля на ключ в "entity" Ничего не понял. И что помешает записать в этот атрибут ссылку на Entity другого типа? Foreign key пропустит - вполне валидная ссылка на Entity, никаких проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2014, 15:05 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38718876&tid=1540820]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 142ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...