Цитата: Lapsha от 01.02.2017 06:38:43Не думаю, что это обычная БД.
Надо будет про нее почитать где-нить.
Цитата: slavae от 01.02.2017 07:40:56Я могу понять для чего реальное время нужно по работе с датчиками - чтобы иметь нормальный контроль, управление и обратную связь.
А вот что удивительного в том, чтобы хранить историю датчиков в обычной БД, я не пойму )
Цитата: slavae от 01.02.2017 07:40:56Я могу понять для чего реальное время нужно по работе с датчиками - чтобы иметь нормальный контроль, управление и обратную связь.
А вот что удивительного в том, чтобы хранить историю датчиков в обычной БД, я не пойму )
Цитата: adolfus от 01.02.2017 09:08:14История датчиков, т.е. телеметрия, хранится для того, чтобы при необходимости ее "проиграть". Датчики бывают разные, одни могут хранить выборку, "защелкивая" ее в заданный момент времени, другие не могут -- они "отдают" значение в момент считывания. В результате значения датчика хранятся в виде пар "время:значение". Время играет роль ключа для последовательного доступа (через курсор). Поэтому хранить телеметрию приходится в базе данных. Вопрос лишь в том, зачем для этого именно реляционная БД. Для хранение телеметриии отлично подходит БД типа "ключ:значение" с поддержкой вторичных БД (ключей). Скорее всего, в то время, когда система разрабатывалась, оракл был просто моден. Это как туфли на шпильках -- неудобно, калично, но красиво.
Цитата: slavae от 01.02.2017 07:40:56Я могу понять для чего реальное время нужно по работе с датчиками - чтобы иметь нормальный контроль, управление и обратную связь.
А вот что удивительного в том, чтобы хранить историю датчиков в обычной БД, я не пойму )
Цитата: adolfus от 01.02.2017 09:08:14История датчиков, т.е. телеметрия, хранится для того, чтобы при необходимости ее "проиграть". Датчики бывают разные, одни могут хранить выборку, "защелкивая" ее в заданный момент времени, другие не могут -- они "отдают" значение в момент считывания. В результате значения датчика хранятся в виде пар "время:значение". Время играет роль ключа для последовательного доступа (через курсор). Поэтому хранить телеметрию приходится в базе данных. Вопрос лишь в том, зачем для этого именно реляционная БД. Для хранение телеметриии отлично подходит БД типа "ключ:значение" с поддержкой вторичных БД (ключей). Скорее всего, в то время, когда система разрабатывалась, оракл был просто моден. Это как туфли на шпильках -- неудобно, калично, но красиво.
Цитата: Lapsha от 01.02.2017 06:38:43Не думаю, что это обычная БД.
Надо будет про нее почитать где-нить.
Цитата: Спецагент Купер от 31.01.2017 10:24:46В большинстве случаев задачи реального времени не решаются выбором операционной системы. ОС высокого уровня, такие как *NUX, обычно ставятся в конце цепочки обработки, там где пользовательский интерфейс, управление и другие подобные задачи.
Где возникает реалтайм, там самое место или микроконтроллеру, если нужна низкая латентность, или FPGA/DSP, или на крайний случай ARM процессор.
Цитата: Superwad от 01.02.2017 15:18:26Очень даже получается крайне удобно.
Если уж говорить то БД уссловно делятся на две группы - версионники и протоколисты. Оракл и др. как правило протоколисты - надежно и медленно. Версионники - быстро, но могут пропадать данные при сбросе зависания.
Поэтому версионники, как правило и ставят для сбора данных. К версионникам относят IBase/Firebird и Postgree/ У них есть классная штука - подписка на события (вставка, изменение, удаление) - можно обновлять просмотр данных по команде от сервака. Поэтому их используют для лабораторий и в танках (в тех же абрамсах).
Кстати, в IBase впервые появилась такая штука, как хранение массивов в ячейке. Попросила одна испытательная лаборатория, так и осталась эта приблуда. Правда работа с этим массивом не совсем тривиальная. А так да, BLOB можно, но так как количество датчиков постоянно, то городить блобы не удобно, проще в свою колонку, тем более 32 тысячи колонок - более чем достаточно для одного устройства (надо найти еще такое количество датчиков), а таблиц может быть много - для каждого узла/станка свой. Зато не надо парсить, сразу можно из БД рисовать графики и даже управление наладить Просто и удобно с протоколированием.
Так за бугром решили одну из задач по обработке больших данных (БигДата). Я сам так использую - очень удобно, быстро и надежно.
Цитата: slavae от 01.02.2017 10:00:29Теория у вас хорошая, только на практике такие вещи я бы хранил в блобах большими кусками. А снаружи выставил бы статистику по этому диапазону.
Цитата: Superwad от 01.02.2017 15:18:26К версионникам относят IBase/Firebird и Postgree/ У них есть классная штука - подписка на события (вставка, изменение, удаление) - можно обновлять просмотр данных по команде от сервака. Поэтому их используют для лабораторий и в танках (в тех же абрамсах).
Кстати, в IBase впервые появилась такая штука, как хранение массивов в ячейке.
Цитата: Superwad от 01.02.2017 15:18:26Очень даже получается крайне удобно.
Если уж говорить то БД уссловно делятся на две группы - версионники и протоколисты. Оракл и др. как правило протоколисты - надежно и медленно. Версионники - быстро, но могут пропадать данные при сбросе зависания.
Поэтому версионники, как правило и ставят для сбора данных. К версионникам относят IBase/Firebird и Postgree/ У них есть классная штука - подписка на события (вставка, изменение, удаление) - можно обновлять просмотр данных по команде от сервака. Поэтому их используют для лабораторий и в танках (в тех же абрамсах).
Кстати, в IBase впервые появилась такая штука, как хранение массивов в ячейке. Попросила одна испытательная лаборатория, так и осталась эта приблуда. Правда работа с этим массивом не совсем тривиальная. А так да, BLOB можно, но так как количество датчиков постоянно, то городить блобы не удобно, проще в свою колонку, тем более 32 тысячи колонок - более чем достаточно для одного устройства (надо найти еще такое количество датчиков), а таблиц может быть много - для каждого узла/станка свой. Зато не надо парсить, сразу можно из БД рисовать графики и даже управление наладить Просто и удобно с протоколированием.
Так за бугром решили одну из задач по обработке больших данных (БигДата). Я сам так использую - очень удобно, быстро и надежно.
Цитата: Oleg K. от 02.02.2017 09:11:07Вы извините, но выделенное звучит как-то странно. В Oracle и postgresql разные схемы хранения данных, но на общем функционале это не отражается с точки зрения API - обе базы реализуют MVCC - Multiversion Concurrency Control (параллельный достум к нескольким версиям данных). Если вы сказали COMMIT - значит данные сохранены. Выключат свет или нет - уже не важно - буффер сброшен на диск (да, это можно выключить - если у вас RAID массив с батарейкой и т.п., но по-умолчанию оно включено). Что вы называете "подписываться на события" - это триггеры БД? Это тоже не зависит от схемы хранения данных ("версионники"-"протоколисты").
Если вы имели ввиду что-то другое (не MVCC, Triggers), пожалуйста, напишите в общеупотребительных терминах.
Основная подготовка БД к работе с большим потоком данных - это убирание разных ненужных вещей с таблиц, чтобы база данных могла показать большую производительность. Так что на таблице с данными, куда собираются показатели с датчиков, точно не будет никаких триггеров, никаких индексов - ничего, что может помещать работе. А для оптимизации будет использовано партиционирование.
Знаю, что даже MSSQL используется для хранения такого рода данных. Что уж говорить о более серьезных БД вроде Oracle или PostgreSQL.
Цитата: slavae от 01.02.2017 21:30:33Спасибо, конечно, за просвещение и повтор легенд про Интербейз )) И, насколько я помню, Джим Старки писал на форуме FB, когда они только взялись за опенсорс, что массивы он придумал для аэропорта.
В FB есть возможность группировать по номеру колонки, так же, как сортировать. Это было сделано по моему предложению, когда мы ещё сидели на ньюс-группах ) Это потому что я ленивый, а выписывать поля мне было лениво.
Не вздумайте кого-нибудь уверять, что Оракл - блокировочник, а не версионник )
В моей рабочей системе в таблице товаров TOV в районе 20 млн записей, и я могу сказать, что много данных дают возможность проявить свою изобретательность.
Вы с вашими 32 тыс колонок скорее упрётесь в реальную пропускную способность сети.
Сейчас для закачки больших данных в БД вместо параметрического insert-а я использую их закачку большим подготовленным блоком на большое количество записей как blob или clob, а уже на месте - разбор в процедуре и вставку. Но в случае с датчиками скорее всего никому не нужна подробнейшая детализация мгновенно, поэтому я сразу и предложил хранить данные сразу этими самыми большими кусками со статистикой, а если уж понадобится узнать конкретное значение конкретного датчика, блок можно и разобрать.
Цитата: Superwad от 02.02.2017 09:57:52Не знаю, как в других БД, но в IBase/Firebird и Postgree - это называется подписка на событие. Есть отдельный элемент управления. вы подписываетесь на определенное событие (Вставка, изменение или удаление - или на все вместе взятое), на конкретную таблицу. Допустим, одна программа сбора данных вставила новые данные в таблицу, а терминальная программа оператора получила по подписке сигнал об изменении в этой таблице и по этой команде - обновила отображаемые данные. Я так делал очень все хорошо и четко работает на Firebird.
Цитата: adolfus от 02.02.2017 08:32:50Господа, какие массивы? Одномерные? Телеметрия -- всегда пары "время:значение". Каждый канал (датчик) по своему опрашивается и у каждого "свое" время, даже если они одного типа и стоят на одном блоке/объекте. Датчики бывают разные, одни могут быть крайне наворочены и иметь внутреннюю память. Такие они отдают данные фреймами. Другие просты как грабли -- преобразователь->АЦП->пара регистров. Как только пришел фронт по линии его управления, датчик защелкивает состояние АЦП в одном регистре а состояние шины времени в другом. Заберете -- будут ваши, нет -- перезапишутся следующим. Контроллер или программа данные с каждого датчика собирает в кадры для передачи на верхний уровень. Даже когда снимаются данные с одной точки парой датчиков в рамках резервирования, у них и время измерения и значение могут быть разные.
Цитата: Oleg K. от 02.02.2017 10:11:19Ну тогда я не знаю, как вы можете обоснованно рассуждать о работе в реальном времени, не понимая, как оно устроено до самого нижнего уровня. Вы же не знаете, что используете...
Ну то есть сделать вы это можете ("раз работало так раньше - то и сейчас будет работать"), но аргументированно что-либо утверждать - нет. И рассуждения ваши о базах данных и их применимости мне теперь кажутся пустыми.
Цитата: Superwad от 02.02.2017 10:28:121) Как работают в деталях БД - чтобы правильно ответить на все вопросы - нужно быть одним из разработчиков БД - тогда будешь знать все нюансы работы конкретного продукта. Я им не являюсь, а использую что есть. Написано в литературе подписка на события - я использую этот термин. Возможно, у других авторов документации/литературы может быть свои мнения.
2) Реальную картину, как это работает, можно получить только в боевых условиях. Абсолютно все предусмотреть невозможно, хотя и необходимо. Потому как теория -это одно, а практика, как показывает жизнь - это совсем другое. То, что должно теоретически рабоать так как задумано, в реальности так не работает. Поэтому я очень много экспериментирую, прежде чем использую ту или иную вещь, алгоритм. У меня лежит много тестовых программ, на которых я отрабатываю отдельные элементы, выбирая оптимальный вариант для конкретной задачи.
Цитата: Oleg K. от 02.02.2017 10:44:09Судя по всему, это специфическая для firebird вещь (я про POST EVENT). По крайней мере в других БД (Oracle, PostgreSQL) я такое не встречал, но может быть есть и такие механизмы или схожие.
Я же не говорю, что вы что-то не так делаете. Я лишь указал на то, что утверждать что-либо касательно гарантированной скорости обработки запроса базой данных (на запись новых данных) вы не можете, так как не знаете всего механизма её работы. Конечно же, кроме теорий нужны и эксперименты, но у вас именно нет теории.
Думаю, что обычных баз данных вполне хватает на современных компах, чтобы ослеживать сотню-другую датчиков, поэтому для реальной работы и достаточно выделенного в вашем тексте. При условии, что потеря (раз в год или месяц) нескольких минут показаний не является критичной против большого удорожания оборудования и программ.
Цитата: Superwad от 02.02.2017 10:28:12Скрытый текст