|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
ещё один недостаток типы, не надо рассказывать про десериализацию дат, десятичных числовых полей и прочее ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2018, 23:48 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
Кот Матроскинtip78Искать по глубокому дереву всё ещё будет медленнее, В третий раз - чтобы эмулировать EAV, никакие "глубокие деревья" в JSON не нужны. Нельзя эмулировать EAV, JSON-ом. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2018, 23:49 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVosttВ этом весь смысл EAV, а не достоинство. Иначе нафига мне эти JSON с XML-ем упёрлись, если я просто могу создавать таблицы и налаживать между ними связи? Как обычно. Если считать "смыслом EAV" создание винегрета из данных и метаданных - то вполне возможно в этом ей нет конкуренции :) Но я как-то считал ее предназначением динамическую настройку атрибутов сущности. И эту задачу JSON/XML вполне решают, с лучшим нежели EAV контролем целостности. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2018, 23:52 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
Кот МатроскинhVosttВ этом весь смысл EAV, а не достоинство. Иначе нафига мне эти JSON с XML-ем упёрлись, если я просто могу создавать таблицы и налаживать между ними связи? Как обычно. Если считать "смыслом EAV" создание винегрета из данных и метаданных - то вполне возможно в этом ей нет конкуренции :) Но я как-то считал ее предназначением динамическую настройку атрибутов сущности. И эту задачу JSON/XML вполне решают, с лучшим нежели EAV контролем целостности. Нет не решают. JSON хранит какие угодно данные, максимум что может обеспечить СУБД, это валидность JSON-а, но не содержание. В EAV мы ведём и схему и данные, и это контролируется БД. Если вести некий гибрид, типа EA-JSON (где V это JSON), то БД не будет гарантировать, что в JSON там не хранится какой-то полный бред, ну никак. А также не может запретить удалить атрибут при наличии значений. А также невозможно полноценное ведение значений -- ссылок. Это не + или -, это просто факты. Поэтому JSON это не EAV, это совершенно разные решения, которые не решают одно и ту же задачу, они решают разные задачи. Вы почему-то настойчиво пытаетесь проявить своё негативное отношение к модели данных, и поэтому делаете не верные выводы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2018, 00:00 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVosttJSON хранит какие угодно данные, максимум что может обеспечить СУБД, это валидность JSON-а, но не содержание. В EAV мы ведём и схему и данные, и это контролируется БД. Если вести некий гибрид, типа EA-JSON (где V это JSON), то БД не будет гарантировать, что в JSON там не хранится какой-то полный бред, ну никак. А также не может запретить удалить атрибут при наличии значений. А также невозможно полноценное ведение значений -- ссылок. Это не + или -, это просто факты. Не знаю как JSON, но содержимое XML-ей, их соответствие схеме и т.п. СУБД вполне умеет контролировать. Это просто факты :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2018, 00:14 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
Кот МатроскинНе знаю как JSON, но содержимое XML-ей, их соответствие схеме и т.п. СУБД вполне умеет контролировать. Это просто факты :) Представим UI админки интернет-магазина. Заходит админ, открывает раздел "атрибуты товара", добавляет новый атрибут, допустим, «Цвет», указывает тип, сохраняет. В БД улетает обычный INSERT, который добавляет в схему новое поле. И он с этого момента начинает контролироваться БД. Можно и список всех атрибутов получить как обычный запрос, и каких-то левых Value засунуть не получится, только в рамках заданных атрибутов. Расскажите, как у вас это будет организовано на XML. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2018, 00:22 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVosttНа самом деле JSONB действительно лучше, чем EAV hVosttНо это не EAV, не является её альтернативой, и не решает задач так, как их решает EAV. и как это вам удалось собрать 2 этих утверждения в одном сообщении? ) Тут либо оно лучше и заменяет, либо оно само по себе и лучше "самого себя", а EAV это таки другое. Взаимоисключающие_параграфы на самом деле, после выхода jsquery, json_path_ops и селективных индексов (когда индекс не на всё дерево, а только на нужные ключи, что делает его в разы меньше и быстрее) - можно перетестировать различные паттерны. Но не такие примитивные, как в статье, где поиск только по верхнему ключу, а что-то посерьёзней, типа сложной отчётности, категорий, свойств итд. Я вот когда пробовал заменить свои задачи на JSONB в итоге плюнул. GIN jsonb_path_ops порвал монгу и все остальные индексы. (в статье его даже не юзали, как и jsquery) Ещё они планируют таки добавить (толи тип, толи функцию) datetime(), которая сможет управлять таймстампами в JSONB... Т.е. одним недостатком меньше. Но мой тезис был не о том, что JSONB ни на что не годится. Речь то не про то. Он рулит в своей нише, но эта ниша не может полностью заменить EAV, просто потому, что нет полноценной замены плюшек EAV. Нет релятивисткого "сахара". FK нет. И потом, когда достаёшь это счастье в ПХП, тебе на каждой строчке надо делать json_decode(), что при 100 строках уже чувствуется. Когда надо сложить в кучу много второстепенной инфы, то да, там можно всё скинуть в jsonb, но если там надо будет искать глубоко по дереву, то до появления jsquery это было очень проблематично и затратно. Но даже сейчас, если фильтр будет сложным, результат может не понравиться. В 11й может будет лучше. А может нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2018, 03:58 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
tip78и как это вам удалось собрать 2 этих утверждения в одном сообщении? ) Согласен, глупо получилось. Я хотел сказать, если вам надо хранить произвольные структуры данных, то JSON(B) лучше EAV. Т.е. это лучше вот этого Код: sql 1. 2.
tip78Я вот когда пробовал заменить свои задачи на JSONB в итоге плюнул. Ну вот и вы туда же Заменить задачи? В общем, мне к сказанному больше нечего добавить, всё довольно очевидно и понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2018, 08:58 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
В БД улетает обычный INSERT, который добавляет в схему новое поле .Опечатка ? Новую запись ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2018, 09:28 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVosttКот МатроскинНе знаю как JSON, но содержимое XML-ей, их соответствие схеме и т.п. СУБД вполне умеет контролировать. Это просто факты :) Представим UI админки интернет-магазина. Заходит админ, открывает раздел "атрибуты товара", добавляет новый атрибут, допустим, «Цвет», указывает тип, сохраняет. В БД улетает обычный INSERT, который добавляет в схему новое поле. И он с этого момента начинает контролироваться БД. Можно и список всех атрибутов получить как обычный запрос, и каких-то левых Value засунуть не получится, только в рамках заданных атрибутов. Расскажите, как у вас это будет организовано на XML. google "SQL Server xml schema collection". ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2018, 09:35 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
L_argoВ БД улетает обычный INSERT, который добавляет в схему новое поле .Опечатка ? Новую запись ? Новый атрибут, поле с точки зрения динамической модели данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2018, 10:47 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
Кот Матроскинgoogle "SQL Server xml schema collection". Код добавление атрибута в студию. И удаления с зависимыми значениями. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2018, 10:48 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVosttЯ хотел сказать, если вам надо хранить произвольные структуры данных, то JSON(B) лучше EAV. Т.е. это лучше вот этого Код: sql 1. 2.
а если надо отсортировать по attribute_name ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2018, 12:25 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVosttПомидорНу может в этой статье ничего не сказано как ограничить администратора системы который собственно и решает надо добавлять новое поле или нет, но большой разницы с eav не вижу. Да, в случае с eav это ограничение на основе внешних ключей на уровне базы данных, а в случае с жейсон эту же логику ограничений можно сделать на уровне приложения. Тогда postgres здесь как бы не упёрся, берём монгу или другое документо-ориентированное хранилище и привет. Суть именно EAV в сохранении ограничений целостности БД, хоть в какой-то мере. ПомидорСкажем администратор системы решил быть таким и таким полям, а модератор хочет обойти это решение, хочет добавить дополнительное поле, это очень легко решается как и в случае с eav моделем. Это бардак. Зачем монго когда эту задачу эффективно решает postgres? Я привел jsonb только для моделей которые требуют динамические аттрибуты (аналог eav), все остальное решается как обычно в рсубд. Что значит бардак? Разве не администратор интернет магазина решает что для конкретной категории товаров нужны определенные аттрибуты с указанием типа аттрибута, ограничением определенных значений которые она может принимать и так далее? Тоже самое можно сделать и для жейсона, но как я уже написал валидация данных в вашем случае будет ну уровне базы данных, а в моем случае на уровне приложения. Здесь почти разницы нету, обе могут решить задачи валидации данных. А вот когда надо будет запросы с фильтрацией, то жейсон уже вырывается вперед, а eav остается далеко позади, что и сказано в указанной мной статье. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2018, 11:28 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVosttКот Матроскинпропущено... Какая задача, легко решаемая EAV, не может быть решена при помощи подхода с JSON/XML? Ну давайте посмотрим. Независимость от конкретных РСУБД. Ограничения целостности (не может быть значений отсутствующих атрибутов). Расширенный EAV мог бы вести типовые значения в отдельных таблицах или колонках, т.е. спектр типов, поддерживаемый БД шире JSON, даже в понятиях ANSI. Ну XML слишком жирный, хотя поддерживаемых примитивных типов больше. И "решена", имеется в виду средствами БД. Так как если сводить на уровень приложения, вообще всё можно решить, даже без БД )) Про какую независимость РСУБД вы имеете ввиду? Если хорошая фича реализована в одной системе, то скоро она станет стандартам. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2018, 11:35 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
tip78Кот Матроскин, а это что по-вашему? Код: sql 1. 2. 3. 4. 5.
Ваш запрос не очень понятен. Можете более развернуто написать задачу, его решение на примере eav, а я попробую написать запрос который также решит эту задачу применив жейсон модель. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2018, 11:37 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVosttПомидорВ случае с постгерс ни не заставляет все поля кроме первичного ключа загонять в жейсон поле. Жейсон поле просто приятная возможность чтобы не плодить лишние сущности в базе, причем очень эффективная. Эффективная, но это не альтернатива EAV, в полной мере так сказать. Это другое. Например, со стороны приложения запихать каких-то полей, чудоковатых, при чём у каждой записи вообще свой набор полей. Или сохранить объектную структуру документа, да много чего. Но это не EAV. Чем же это не EAV? Что вы понимаете под EAV? Хорошо, давайте сперва определимся какую задачу решает EAV модель, как она контролирует целостность данных, проводит валидацию, как добавляются новый записи (новый аттрибут товара). И я приведу на жейсоне решение которая будет тоже самое делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2018, 11:41 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVosttSERG1257пропущено... Это какие такие ограничения накладывает EAV? Нельзя создать значение для отсутствующего атрибута. Можно запретить удаление атрибута при наличии значений. Если создавать типовые колонки или таблицы значений, можно задать соответственно типовые ограничения, в том числе ссылки. Все это также решается на жейсоне. Если приведете пример котороя не решается на жейсоне, но вот так просто решается на eav модели, то буду рад исследовать эту задачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2018, 11:45 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
eugene, Можно через связующие таблицы. авторКроме того желательно отразить в БД не одну а несколько классификаций, причем разных для каждого типа устройства. Можно будет к одной единице оборудования привязывать множество классификаций-типизаций ,каждая из которых в свою очередь связана со множеством классов и типов соответственно. Например как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2018, 13:28 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
Никакого EAV,XML,JSON не понадобится. Все индексирется и селектится дешево и сердито. Можно наложить всяких ограницений по уникальности комбинаций ключей. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2018, 13:32 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
ПомидорЗачем монго когда эту задачу эффективно решает postgres? Я привел jsonb только для моделей которые требуют динамические аттрибуты (аналог eav), все остальное решается как обычно в рсубд. Нет, не аналог EAV. Динамические атрибуты без схемы, это вообще любое хранилище, без схемы, хоть текстовые файлы. Таким макаром и обычный блокнот можно назвать аналогом чего угодно. ПомидорЧто значит бардак? Разве не администратор интернет магазина решает что для конкретной категории товаров нужны определенные аттрибуты с указанием типа аттрибута, ограничением определенных значений которые она может принимать и так далее? Тоже самое можно сделать и для жейсона, но как я уже написал валидация данных в вашем случае будет ну уровне базы данных, а в моем случае на уровне приложения. Речь идёт именно о СУБД. На уровне приложения я могу данные вообще хранить в key-value store и всё-всё-всё проверять на уровне приложения, или даже в текстовых файлах хранить. Аналог? Что за детский сад? ПомидорЗдесь почти разницы нету Ну так и все ограничения целостности, транзакции, и всё остальное делайте на уровне приложения. Зачем говорить вообще тогда о БД. Храните хоть всё в памяти, и сбрасывайте дамп на диск. Разницы ведь почти нет. ПомидорА вот когда надо будет запросы с фильтрацией, то жейсон уже вырывается вперед, а eav остается далеко позади, что и сказано в указанной мной статье. В указанной вами статье, SELECT по EAV с индексом быстрее, чем все вариации с JSONb. Обновление с индексом чуть-чуть медленнее. По собственному опыту, у нас есть внедрённая система на EAV, довольно крупная по мерками enterprise, и всё работает шустро. Что касается лучшей реализации, то делать проекции на классических таблицах, добавляя колонки динамически в таблицы, не оставляет вообще никаких шансов по скорости ни EAV, ни JSONb, если уж вас так интересует производительность. И, повторюсь, JSONB не явяется аналогом EAV. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2018, 13:54 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
ПомидорПро какую независимость РСУБД вы имеете ввиду? Если хорошая фича реализована в одной системе, то скоро она станет стандартам. ANSI SQL. Это будет работать сейчас в абсолютном большинстве СУБД. «Скоро» по-вашему, это когда? Когда для работы с JSON в пятёрке самых крупных БД будет одинаковый синтаксис запросов и набор операций? Лет через 10? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2018, 13:56 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
ПомидорЧем же это не EAV? Что вы понимаете под EAV? Хорошо, давайте сперва определимся какую задачу решает EAV модель, как она контролирует целостность данных, проводит валидацию, как добавляются новый записи (новый аттрибут товара). И я приведу на жейсоне решение которая будет тоже самое делать. Я уже давно жду вот такой пример: 1. Администратор интернет-магазина через UI приложения добавляет атрибут для товаров. 2. Администратор добавляет значения этого атрибута для некоторых товаров. 3. Администратор удаляет атрибут, значения атрибута удаляются. Для JSON(B) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2018, 13:58 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
hVosttЧто касается лучшей реализации, то делать проекции на классических таблицах, добавляя колонки динамически в таблицы, не оставляет вообще никаких шансов по скорости ни EAV, ни JSONb, если уж вас так интересует производительность. разделить данные на постоянную часть (условно, таблица CLIENTS, на которую завязана бизнес-логика) и динамическую (условно, таблица CLIENTS_ADDITIONAL_FIELDS, на которую ничего не завязано) ? и подкладывать из отдельной таблицы какой-нибудь JSON/XML с доп.полями? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2018, 14:32 |
|
Пронетирование бд электроэнергетических устройств
|
|||
---|---|---|---|
#18+
читал эту тему , никуда там так и не пришли... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2018, 14:35 |
|
|
start [/forum/moderation_log.php?user_name=Igor_Ch121212]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 441ms |
total: | 614ms |
0 / 0 |