|
|
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
Имеется ввиду не образцово-показательная модель, а модель данных, ориентированная на показатели. Чтобы не обременять SQL.RU, не нарушать правила, состряпал сайт и выложил описание. http://f0001859.xsph.ru/default.html Критика, предложения и замечания принимаются. Будут вопросы - постараюсь ответить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2014, 16:59 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
авторОчень похоже на EAV, только еще добавлено время. ... Система обрабатывает примерно 3000 показателей по 22000 объектов. И я затрудняюсь представить себе непротиворечивую работу подобной системы на основе другой модели данных. Ваще не понял... Что разумеется под "непротиворечивой работой"? автор 1.В настоящее время подобная модель реализована в подсистеме OIS УСОИ – Универсальная Система Обработки Информации программного комплекса OilInfoSystem ... 3.Теперь о производительности. Производительность системы УСОИ оставляет желать лучшего. Собственно, это тот момент, который подтолкнул меня к поиску и разработке альтернативного варианта. Почему я решил, что это мне удастся? Ведь в УСОИ используется флагман СУБД – Oracle, да и разработчики системы люди незаурядные, не один год над системой работали. Ну а чего вы хотите от EAV? На приличных объемах эта структура очень тормозная, в какую СУБД ее не засунь. А тут еще и временную составляющую прилепили... Ну и собственно, в чем заключатеся ориентированность на показатели? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 11:34 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
baracs, Ваще не понял... Что разумеется под "непротиворечивой работой"? Непротиворечивая - это когда поменял исходные данные, открыл отчет - а там уже все пересчитано. Открыл другой - там тоже пересчитано. Противоречивая - это когда поменял исходные данные, открыл отчет - а там производные данные старые, потому что пересчет производных данных выполняется по расписанию в 2:15 программой расчета. Или когда в двух отчетах расчетные данные разные, потому, что в одном алгоритм поменяли, а в другом еще нет. Ну а чего вы хотите от EAV? На приличных объемах эта структура очень тормозная, в какую СУБД ее не засунь. Т.е. разница в производительности на порядок Вас не вдохновляет? Ну и собственно, в чем заключатеся ориентированность на показатели? Наверное, можно назвать значение определенного атрибута определенного объекта в определенный момент времени как-то иначе. Например, тэгом, но мне "показатель" кажется более подходящим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 12:41 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
DirksDRbaracsВаще не понял... Что разумеется под "непротиворечивой работой"? Непротиворечивая - это когда поменял исходные данные, открыл отчет - а там уже все пересчитано. Открыл другой - там тоже пересчитано. Противоречивая - это когда поменял исходные данные, открыл отчет - а там производные данные старые, потому что пересчет производных данных выполняется по расписанию в 2:15 программой расчета. Или когда в двух отчетах расчетные данные разные, потому, что в одном алгоритм поменяли, а в другом еще нет. А как это связано с моделью? DirksDRbaracsНу а чего вы хотите от EAV? На приличных объемах эта структура очень тормозная, в какую СУБД ее не засунь. Т.е. разница в производительности на порядок Вас не вдохновляет? Разница чего с чем? DirksDRbaracsНу и собственно, в чем заключатеся ориентированность на показатели? Наверное, можно назвать значение определенного атрибута определенного объекта в определенный момент времени как-то иначе. Например, тэгом, но мне "показатель" кажется более подходящим. Я не про названия, а про суть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 13:20 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
baracsНу а чего вы хотите от EAV? Лично я хотел бы видеть пример тормозящего запроса и его план. EAV сама по себе, как и любая другая модель данных, вещь пассивная и тормозить не может. Но её своеобразный характер часто вступает в конфликт с табличным шаблоном некоторых разработчиков, которые после этого пытаются совершенно дикими запросами уложить данные в привычное им прокрустово ложе. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 13:34 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
для исходного показателя указываются зависимые показатели, которые должны рассчитываться при изменении данного показателя; при вводе нового значения исходного показателя, его производные показатели помечаются, как требующие пересчета; Имхо неудачная схема. Вы утяжеляете самый критический по времени участок (запись в базу параметра с оборудования) какими-то аналитическими расчетами (что там от чего зависит и что надо обновить). Этот зависимый параметр может быть нужен раз в полгода - но 10 раз в секунду при получении нового первичного параметра Вы будете писать в базу "зависимый параметр B надо обновить, потому что изменился первичный параметр А". Хранить зависимости параметров - полезно. Предоставлять отчетам API, позволяющий определить, устарел ли зависимый параметр или нет - полезно. Рассчитывать это в транзакции обновления первичного параметра - нет никакий необходимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 13:37 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
DirksDRНепротиворечивая - это когда поменял исходные данные, открыл отчет - а там уже все пересчитано. Открыл другой - там тоже пересчитано. Для этого достаточно не использовать хранимые агрегаты, пересчитываемые с низкой периодичностью. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 13:41 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
Ох, как бы это все, да на RDF замутить... Ой, как классно бы легло.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 19:29 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
DirksDR, а я не понял, что ты от нас-то хочешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 19:33 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
ну аффтар с EAV-моделью видно плотно не работал, когда начнет аналитику туда-сюда юлозить, скользить по временной оси, да pivot-ить, а потом еще разбираться с логикой в старых запросах - оно ему и надоест. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2014, 22:52 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
MasterZivDirksDR, а я не понял, что ты от нас-то хочешь? Вы писали:авторОх, как бы это все, да на RDF замутить... Ой, как классно бы легло.... RDF - это Resource Description Framework (RDF, «среда описания ресурса»)? Спасибо,почитаю. А хотелось бы услышать, для каких еще задач, кроме диспетчерских, эта модель "класно бы легла". У меня смутные ощущения, что для экспертных систем можно приспособить. Ключевые показатели эффективности (KPI) идеально ложатся в эту модель. Какие еще задачи нуждаются в подобной модели? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 08:22 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovЛично я хотел бы видеть пример тормозящего запроса и его план.. Медленно выполняется не запрос, а отчет. Выделить из него конкретный запрос проблематично. Если отчет содержит 10тыс показателей, то он формирует 10тыс select-ов. В моем варианте - это 10тыс "key-value" чтений. И это получается быстрее в несколько раз. Dimitry SibiryakovДля этого достаточно не использовать хранимые агрегаты, пересчитываемые с низкой периодичностью. Возникает вопрос, в какой момент пересчитывать агрегаты? 1)При вводе исходного показателя (так сделано в УСОИ, при вводе исходного показателя пересчитываются все зависимые, в одной транзакции) это самый ресурсоемкий подход. 2.Пересчет по расписанию - здесь независимо от периодичности пересчета, будут моменты "противоречивости", когда исходные данные изменены, а производные еще не рассчитаны. 3.Расчет при чтении данных (смотря как долго считается) и т.д. Я использую расчет при ПЕРВОМ чтении производного показателя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 08:50 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
Кот Матроскиндля исходного показателя указываются зависимые показатели, которые должны рассчитываться при изменении данного показателя; при вводе нового значения исходного показателя, его производные показатели помечаются, как требующие пересчета; Имхо неудачная схема. Это обсуждение, на которое я надеялся:) Вы утяжеляете самый критический по времени участок (запись в базу параметра с оборудования) какими-то аналитическими расчетами (что там от чего зависит и что надо обновить). Этот зависимый параметр может быть нужен раз в полгода - но 10 раз в секунду при получении нового первичного параметра Вы будете писать в базу "зависимый параметр B надо обновить, потому что изменился первичный параметр А". Конечно, если бы данные у нас изменялись несколько раз в секунду, я бы такой подход не предлагал. Это в АСУТП такая высокая изменчивость данных, для диспетчерской системы (в нашем случае) это минуты, десятки минут, а в основном 2-х часовки. Предоставлять отчетам API, позволяющий определить, устарел ли зависимый параметр или нет - полезно. Рассчитывать это в транзакции обновления первичного параметра - нет никакий необходимости. Хотел бы я придумать такой API.:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 09:11 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
baracsпропущено... Т.е. разница в производительности на порядок Вас не вдохновляет?Разница чего с чем? реляционного EAV и "key-value" EAV Затрудняюсь ответить на остальные Ваши вопросы, может в процессе обсуждения что-то прояснится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 09:25 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
DirksDR, 1. Описание сделано достаточно внятно для просто любознательного читателя. 2. Неплохой вариант намекнуть на неровное дыхание к "одной замечательной девушке" :). 3. Чуть позже присоединюсь к дискуссии с подачи Кота Матроскина... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 12:09 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
DirksDRПредоставлять отчетам API, позволяющий определить, устарел ли зависимый параметр или нет - полезно. Рассчитывать это в транзакции обновления первичного параметра - нет никакий необходимости. Хотел бы я придумать такой API.:) Ээ, а в чем проблема? если у Вас хранится граф зависимостей параметров и есть даты первичных и вторичных параметров - можно легко сделать функцию IsObsolete ( NameParam, Date), в которой это все считать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 12:34 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovbaracsНу а чего вы хотите от EAV? Лично я хотел бы видеть пример тормозящего запроса и его план. Грамотно. Поскольку я - "разработчик с табличным шаблоном", EAV не люблю и имел дело с такими таблицами - в сотню строк максимум, постольку примеров тормозящих запросов к ним у меня нет. Но есть старое исследование: Сравнительный анализ некоторых методов O - R-преобразования . автор В качестве примера реализации анализируемых подходов рассмотрим справочную информационную систему «Электронный каталог» книжного магазина. В основу положена база данных реального интернет-магазина. Полное описание структуры представлено в виде диаграммы классов предметной области (рис. 1). База данных содержит информацию о 101 087 экземплярах товара, распределенных по 588 разделам, в том числе – 84 287 книг, 6 793 периодических изданий, 10 007 наименований кассет. База данных также содержит информацию о 5 243 издательствах и 42 857 авторах книг. Т а б л и ц а 8 Время выполнения операций и объемы баз данных ПараметрМодель ROT Модель ROT с наследованиемМодель ТенцераМодифицированная модель ТенцераОткрытие всех таблиц базы данных с 5.72–5.74 4.71–4.72 14.01–15.11 14.04–15.16Выборка всех данных по одной Книге без определения типа с 6.57–6.63 15.10–16.02 31.29–31.36 7.83–8.93Выборка всех данных по одной Книге с определением типа с 6.29–6.33 14.18–14.24 30.05–30.82 8.56–10.17Выборка всех данных по одной Кассете без определения типа с 6.43–6.49 15.12–15.14 15.67–16.46 8.71–10.05Выборка всех данных по одной Кассете с определением типа с 0.53 1.06–1.08 4.11–5.29 4.80–5.92Выборка всех данных по всем товарам с 60.12–91.90 206.47–236.32 97.81–135.25 94.83–113.11Вычисление суммы товаров в корзине с 8.61–8.84 8.45–9.35 12.08–13.06 13.50–14.86Добавление новой Книги с 0.03–0.05 0.04–0.13 0.14–0.55 0.17–0.57Изменение данных по одной Книге с 1.31–1.35 2.50–2.61 3.12–8.81 3.62–9.25Объем базы данных МБ 39.5 43.7 49.7 56.6 Dimitry SibiryakovEAV сама по себе, как и любая другая модель данных, вещь пассивная и тормозить не может. Согласен, сформулировал некорректно. Тормозят выборки размазанных по длинной колбасе данных. Т.е. чтобы вытянуть значения атрибутов какой-то одной сущности, с высокой вероятностью, надо облазить всю таблицу. Dimitry SibiryakovНо её своеобразный характер часто вступает в конфликт с табличным шаблоном некоторых разработчиков, которые после этого пытаются совершенно дикими запросами уложить данные в привычное им прокрустово ложе. Красиво, но непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 13:08 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
DirksDRbaracsпропущено... Разница чего с чем? реляционного EAV и "key-value" EAV Гм-м... Что-то я пропустил. Сходил по ссылке еще раз: авторОсобенностью СУБД Cache является несколько вариантов доступа к данным: - Объектный (COS – Cache Object Script) - SQL - Direct Access. Если первые два варианта предоставляют современные высокоуровневые языки программирования, обеспечивающие скорость разработки, то третий вариант – это высокоскоростной «key-value» доступ к данным , обеспечивающий максимальную производительность. Следует ли это понимать так, что ключевым преимуществом вашей модели, является ее реализация на Cache? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 14:27 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинDirksDRпропущено... Хотел бы я придумать такой API.:) Ээ, а в чем проблема? если у Вас хранится граф зависимостей параметров и есть даты первичных и вторичных параметров - можно легко сделать функцию IsObsolete ( NameParam, Date), в которой это все считать. Можно. Это значит, что при каждом чтении расчетного показателя, надо его время сравнить с временем исходных показателей. Рассмотрим пример из статьи: показатель "Добыча НСЖ,м3" для цеха добычи зависит от 20-и одноименных показателей по ДНС. Они в свою очередь зависят от 41 показателя (1 откачка и 40 остатков). Остатки в свою очередь являются расчетными... Т.е. имеем обход дерева показателей сверху вниз при каждом чтении, в данном случае 1601 исходный показатель. Если я помечаю расчетный показатель при вводе исходного, я поднимаюсь вверх по дереву зависимых показателей - для уровня в емкости это 7 показателей. Учитывая, что чтение данных выполняется многократно, а ввод данных в идеале однократно, было выбрано такое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 14:58 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
baracsСледует ли это понимать так, что ключевым преимуществом вашей модели, является ее реализация на Cache? Вы же сами писали авторНу а чего вы хотите от EAV? На приличных объемах эта структура очень тормозная, в какую СУБД ее не засунь. Здесь я с Вами не согласен дважды: 1.EAV может прилично работать на приличных объемах. 2.Если "засунуть" EAV в Cache, можно повысить скорость в несколько раз за счет "key-value". Не назвал бы это ключевым преимуществом, скорее "одним из". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 15:33 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
DirksDRКот Матроскинпропущено... Ээ, а в чем проблема? если у Вас хранится граф зависимостей параметров и есть даты первичных и вторичных параметров - можно легко сделать функцию IsObsolete ( NameParam, Date), в которой это все считать. Можно. Это значит, что при каждом чтении расчетного показателя, надо его время сравнить с временем исходных показателей. Рассмотрим пример из статьи: показатель "Добыча НСЖ,м3" для цеха добычи зависит от 20-и одноименных показателей по ДНС. Они в свою очередь зависят от 41 показателя (1 откачка и 40 остатков). Остатки в свою очередь являются расчетными... Т.е. имеем обход дерева показателей сверху вниз при каждом чтении, в данном случае 1601 исходный показатель. Если я помечаю расчетный показатель при вводе исходного, я поднимаюсь вверх по дереву зависимых показателей - для уровня в емкости это 7 показателей. Учитывая, что чтение данных выполняется многократно, а ввод данных в идеале однократно, было выбрано такое решение. 1. Тут, конечно, не нужно дерево, его надо транзитивно замкнуть - т.е. если параметр A зависит от B, а B зависит от С - надо держать в базе "А зависит от B", "А зависит от C", "B зависит от C". Зависимости параметров - это практически статические данные, неважно сколько они занимают места и как тяжело обновляются. 2. Проверять надо не все 1601 исходных показателя, а искать хотя бы один out-of-date. Учитывая пункт 1, это делается одним запросом с хорошим планом независимо от того, сколько и каких зависимостей мы проверяем. 3. Главное - это схема масштабируема. Если отчеты начинают тормозить - можно запустить какие-то фоновые задания на пересчет параметров в оффлайне, при наличии желания/бабла - на отдельных серверах и т.п. При этом отчеты переделывать не нужно вообще - если отчету повезло и фоновый процесс успел пересчитать все зависимости - ok, функция isObsolete покажет ему false и он быстро отдаст параметр пользователю, если не повезет - функция покажет True и придется считать самим. Если же Ваша система упрется в пиковую длительность транзакции при закачке параметров (а пересчет пусть 7 показателей вместо одного тупого insert может поднять эту длительность в десятки раз )- это все, алес, никакой докупкой оборудования это не решить, систему надо выкидывать и проектировать заново. Я вполне Вам верю, что для Вашей системы это некритично - но мы же обсуждаем не частный случай, а "систему для хранения параметров" вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 16:08 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
DirksDRМедленно выполняется не запрос, а отчет. Выделить из него конкретный запрос проблематично. Если отчет содержит 10тыс показателей, то он формирует 10тыс select-ов. Что при использовании параметризированных запросов и параметров-массивов не может занимать дольше секунды на любом вменяемом железе. DirksDRВозникает вопрос, в какой момент пересчитывать агрегаты? Это зависит от железа и потребностей в выборках. Первое приближение всегда - считать при выборках, сохранять никогда. Второе - сохранять при изменении первички. baracsесть старое исследование Читать которое становится смешно уже после "в качестве хранилища выбрана база данных формата MS Access 2000". Запросов - не приведено. Их планов, естественно, тоже. baracsТормозят выборки размазанных по длинной колбасе данных. Т.е. чтобы вытянуть значения атрибутов какой-то одной сущности, с высокой вероятностью, надо облазить всю таблицу. Построить индекс на поле связи "сущность-атрибут" мешает что-то?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 16:23 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
DirksDRbaracsСледует ли это понимать так, что ключевым преимуществом вашей модели, является ее реализация на Cache? Вы же сами писали авторНу а чего вы хотите от EAV? На приличных объемах эта структура очень тормозная, в какую СУБД ее не засунь. Имелись ввиду реляционные. DirksDR1.EAV может прилично работать на приличных объемах. Почему же незаурядным разработчикам, на флагмане СУБД, за несколько лет не удалось этого добиться (по вашим словам)? DirksDR2.Если "засунуть" EAV в Cache, можно повысить скорость в несколько раз за счет "key-value". Не назвал бы это ключевым преимуществом, скорее "одним из". Кот Матроскинмы же обсуждаем не частный случай, а "систему для хранения параметров" вообще. А так, топик надо было создавать в "Сравнении СУБД". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 18:02 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov baracsесть старое исследование Читать которое становится смешно уже после "в качестве хранилища выбрана база данных формата MS Access 2000". Запросов - не приведено. Их планов, естественно, тоже. Ну, ткните в сравнение на промышленной СУБД с планами. Dimitry Sibiryakov baracsТормозят выборки размазанных по длинной колбасе данных. Т.е. чтобы вытянуть значения атрибутов какой-то одной сущности, с высокой вероятностью, надо облазить всю таблицу. Построить индекс на поле связи "сущность-атрибут" мешает что-то?.. Нет, но высока вероятность IndexScan-ов вместо Seek-ов. А т.к. таблица узкая, IndexScan не сильно эффективнее TableScan-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 18:04 |
|
||
|
Показательная модель данных
|
|||
|---|---|---|---|
|
#18+
baracsвысока вероятность IndexScan-ов вместо Seek-ов. А т.к. таблица узкая, IndexScan не сильно эффективнее TableScan-а. Разве соотношение эффективности индексного доступа по сравнению с полным сканированием таблицы не зависит от селективности индекса (то бишь в данном случае от количества объектов в таблице)?.. Если в БД 100500 объектов, и у каждого из них по 10 атрибутов, то на выборке всех атрибутов одного объекта индексный доступ будет в 100500 раз эффективнее полного сканирования. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2014, 18:19 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38661322&tid=1540866]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
14ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 187ms |

| 0 / 0 |

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