crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
Litkevich Yuriy
  опции профиля:
сообщение 25.12.2008, 13:27
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


с лета никак не определюсь как должна быть устроена система.
Итак, есть море оборудования, на них датчики. С датчиков собирается информация и акумулируется в БД (FireBird). На клиентских машинах (их может быть очень много) стоит прога (назовем её клиент). С клиента всю ситему можно настривать (какие датчики опрашивать, параметры оборудования задавать и т.п.), и получать отчеты о работе оборудования (т.е. история изменения параметров, история показаний датчиков).
Отчеты в общем случае одинаковые, то есть почасовое состояние оборудования (например, сигналов с датчиков), но формулы расчета разные зависят от типа датчиков и оборудования.

Текущая структура выглядит так:
 Р В Р в‚¬Р В РЎВ˜Р В Р’µР Р…ьшено Р Т‘Р С• 49%
Прикрепленное изображение
515 x 234 (15.87 килобайт)

Хочется сделать так, чтобы пользователь мог в водить формулы расчета для заданного параметра. Но пока они жестко зашиты и вся обработка данных (разные расчеты, подготовка промежуточных результатов для отчетов) ведется в нутри БД с помощью тригеров, а при запросе с клиента еще и ХП'шки подключаются к этому процессу, досчитывая/выбирая необходимые данные. последний факт приводит к тормозам на стороне клиента.
Собирать отчетные данные помере сбора данных годится только для данной конкретной обстановке (определяемой настройками оборудования).

Вот я думаю заменить на этой схеме желтый квадратик
либо на приложение, которое будет принимать события от БД (уведомления) заниматся расчетами и складывать в некую выходную таблицу,
либо на UDF'ку, которая будет вызыватся тригером делать расчет, а тригер будет помещать результат в некую выходную таблицу.
Т.е. вынести прикладную часть (т.н. бизнес логику)

Может у кого есть мысли по этому поводу, а то и вовсе опыт создания подобных систем?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 25.12.2008, 14:07
Сообщение #2


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


возможно такая вещь называется трехзвенная система (или многозвенная)
Цитата(Litkevich Yuriy @ 25.12.2008, 13:27) *
Но пока они жестко зашиты

зашиты в код ХрПр? ну дык можно либо параметрами передавать, либо считывать из какихто таблиц, а к таблицам интерфейс.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 25.12.2008, 14:08
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Собственно говоря, система анализа послеполетной информации - основной проект которым я занимаюсь. Правда, в нем нет БД. Смысл такой. Данные с датчиков, принимаемые нашими приборами, пишутся на флеш-память в определенном виде (лог-файлы). Есть входные данные, согласно которым указывается какие параметры следует выбрать из лог-файлов.
На мой взгляд, твоя задумка заменить ХП на программу правильное. Возможно, следует дать пользователю возможность вводить в некотором формализованном виде формулу (если она не является чересчур громоздкой), а программа будет ее распарсивать и в соответствии с ней делать соответствующие расчеты. На первый взгляд, у меня такое мнение.
Посмотрел схему. Чем занимается scanner??? Это ПО или какое-то БД-шная штуковина?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.12.2008, 14:25
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 25.12.2008, 17:07) *
зашиты в код ХрПр?
да. Например для расчета потребления эл.энергии для заданной точки учета (далее Т.У.) из таблицы эл.счетчиков берется параметр счета (кол-во импульсов на кВт*ч) и считается кВт*ч. Для другого типа Т.У. свой расчет.

Цитата(AD @ 25.12.2008, 17:08) *
Чем занимается scanner???
софтина на Qt'ях опрашивающая через последовательный порт контроллеры расположенные в оборудовании и складывает информацию в БД.

сначало Scaner запрашивает у БД, что нужно опрашивать, вызовом процедуры P_GETDEVICE. Получает масив из трех столбцов:
PORT, ADDRESS, FIELD - Номер порта, адрес устройства в сети ModBus и номер поля данных
Опрашивает устройства по полученому списку, затем возвращает в БД данные с помощью ХП P_APPENDDATA(PORT, ADDRESS, FIELD, VALUE)
эта процедура складывает данные в табличку и еще завёт какую нибудь ХП для промежуточных расчетов (примитивных)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 25.12.2008, 14:44
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Лучше все промежуточные расчеты вынести из СУБД в приложение. Если не ошибаюсь, ПО быстрее делает расчет, чем СУБД (если правильно сделать, конечно! :))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 25.12.2008, 15:35
Сообщение #6


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Litkevich Yuriy @ 25.12.2008, 14:25) *
да. Например для расчета потребления эл.энергии для заданной точки учета (далее Т.У.) из таблицы эл.счетчиков берется параметр счета (кол-во импульсов на кВт*ч) и считается кВт*ч. Для другого типа Т.У. свой расчет.

ну это бизнес правила, если они простые то ничего страшного что они в ХП, если тяжелые то конечно нада вытаскивать. А ввод формулу расчета юзером - фактически это заставление юзера программить, ведь это получается чтото типа запроса. Нужно только если таких формул может быть неограниченное или очень большое число
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.12.2008, 15:52
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 25.12.2008, 18:35) *
А ввод формулу расчета юзером - фактически это заставление юзера программить, ведь это получается чтото типа запроса
несовсем так. Положим в вели еще Т.У. подключили физически. Юзер, в данном случае инженер заказчика, в водит формулу типа:
физТУ = К1ТУ*счетчикТУ

где:
физТУ - физическое значение Т.У.
счетчикТУ - значение счетчика данной Т.У. принятое из оборудования
К1ТУ - некий параметр пересчета который берется из сво-ств Т.У.

и далее пользователи (уже не только инженер) видят понятные для них цифры (литры, килограммы, кВт*ч и т.п.).
пока оперируем только примитивными расчетами и внутри БД. Но будут нужны и более серьезные, в том числе интегрирование и диференцирование.

Мне хочется понять 2 вещи
1) писать ли UDF, которая и распарсит формулу и посчитает, и использовать ее в нутри БД
или собственное приложение, которое будет работать по событиям из БД.
2) проводить расчет помере поступления данных и складывать в доптаблицу (при этом в базе появляются дополнительные данные) или
проводит расчет по запросу пользователя (т.е. формировать отчет ).

Есть такой нюанс. Данные нужно хранить 5 лет. Т.е. их будет много. Наша старая система №1 (Железо + ПК с Paradox'ом) обслуживает свыше 700 Т.У. Ситсема №2 (Железо + ПК с FireBird'ом) около 80 Т.У. И первая задача заместить старую систему №1, затем №2 (т.е. они буду единым целым), а затем наращивать кол-во Т.У. (~ до 2500 Т.У.)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 25.12.2008, 18:37
Сообщение #8


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Litkevich Yuriy @ 25.12.2008, 15:52) *
проводить расчет помере поступления данных и складывать в доптаблицу (при этом в базе появляются дополнительные данные) или
проводит расчет по запросу пользователя (т.е. формировать отчет ).

это зависит от колва запросов одних и тех же данных. Если одни и теже данные нужны, не знаю, 100 раз то наверно лучше их один считать
Цитата(Litkevich Yuriy @ 25.12.2008, 15:52) *
Есть такой нюанс. Данные нужно хранить 5 лет. Т.е. их будет много. Наша старая система №1 (Железо + ПК с Paradox'ом) обслуживает свыше 700 Т.У. Ситсема №2 (Железо + ПК с FireBird'ом) около 80 Т.У. И первая задача заместить старую систему №1, затем №2 (т.е. они буду единым целым), а затем наращивать кол-во Т.У. (~ до 2500 Т.У.)

с какой скоростью растет база?

Цитата(Litkevich Yuriy @ 25.12.2008, 15:52) *
1) писать ли UDF, которая и распарсит формулу и посчитает, и использовать ее в нутри БД
или собственное приложение, которое будет работать по событиям из БД.

с точки зрения кода наверно одно и тоже, но приложение можно запустить на другом компе или ядре, а udf врядли, то есть будет теоретически более производительно
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.12.2008, 19:11
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 25.12.2008, 21:37) *
с какой скоростью растет база?
про новую пока затрудняюсь сказать, оставил на недельку работать (только две Т.У.) посмотрю потом

в старых больше трех месяцев данные не копятся иначе на выборку отчета от 30 до 40 мин уходило, но тачка медленная (селерон полуторный с 512метрами памяти)

Цитата(kuler @ 25.12.2008, 21:37) *
но приложение можно запустить на другом компе или ядре, а udf врядли
а UDF тоже, этож просто dll'ка которую СУБД подгружает по мере надобности
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 25.12.2008, 19:41
Сообщение #10


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Litkevich Yuriy @ 25.12.2008, 19:11) *
(селерон полуторный с 512метрами памяти)

ну это вообще не серьезно
Цитата(Litkevich Yuriy @ 25.12.2008, 19:11) *
UDF тоже, этож просто dll'ка которую СУБД подгружает по мере надобности

дык он её юзает возможно в том же процессе
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.12.2008, 19:46
Сообщение #11


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kuler @ 25.12.2008, 22:41) *
дык он её юзает возможно в том же процессе
а для меня-то в этом нет никакой разницы

или ты имеешь в виду, что запустить можно на некой соседней машине?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 25.12.2008, 20:01
Сообщение #12


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Немного непонятно, результаты расчётов нужно хранить или только в отчётах показывать/печатать?
Если хранить, то что делать при изменении формул?
Если только показывать/печатать, то зачем сервер напрягать?

Ну и для языка я бы в любом случае посоветовал бы что-нибудь высокоуровневое - Python например.
У него и библиотек много (есть оптимизированные для научных расчётов) и изучение быстрое. :)
Можно JavaScript подцепить - но он тормознее выйдет, и с библиотеками придётся повозится...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.12.2008, 20:12
Сообщение #13


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Tonal @ 25.12.2008, 23:01) *
Немного непонятно, результаты расчётов нужно хранить или только в отчётах показывать/печатать?
расчеты только для отчетов.

Цитата(Tonal @ 25.12.2008, 23:01) *
Если только показывать/печатать, то зачем сервер напрягать?
чтобы отчет махом показывался пользователю

Цитата(Tonal @ 25.12.2008, 23:01) *
Если хранить, то что делать при изменении формул?
я над этим тоже пока голову ломаю. Дело в том что формулы содержат параметры, а они могут менятся. Например кол-во импульсов на кВт*ч для эл.счетчика. однако счетчики иногда выходят из строя и надо ставить новый. Тогда нужно забить новое начальное показание счетчика и его коэффициент. я это дело думаю в историю записывать. А пока делаю так:
значения (целочисленный счетчик) пишу в таблицу с данными и штам времени. Затем с помощью ХП беру коэффициент счетчика из таблицы параметров оборудования считаю кВт*ч и пишу полученное значение в доптаблицу+ID данных которым это значение соответствует.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 26.12.2008, 8:29
Сообщение #14


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Мне кажется, ты таки зря всё это в сервер пихаешь.
Напиши себе наследника TableModel, который эти преобразования делает налету и будет тебе щастье. :)
Даже если для преобразования будешь использовать какой-нибудь скриптовый движёк тормоза будут заметны только на довольно больших объёмах данных.
Кстати, какие предполагаются объёмы отчётов? Какое количество инфы будешь показывать?

П.С У меня знакомый делал прогу на VB для обработки и графического отображения некоторых данных.
Данные были табличные, в простом текстовом формате по 15мб на файлик.
Перед отображением данные обрабатывались пользовательскими скриптами на VBS - скриптовый движёк встроенный в винду.
Задержек в отображении не было, хотя масштаб можно было выбирать.
Прога разрабатывалась 10-13 лет назад для стандартных на те времена машин.

Сообщение отредактировал Tonal - 26.12.2008, 8:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.12.2008, 11:01
Сообщение #15


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Tonal @ 26.12.2008, 11:29) *
Кстати, какие предполагаются объёмы отчётов? Какое количество инфы будешь показывать?
сейчас самая потребная форма отчета такая:
Число | 00:00 | 01:00 | ... | 23:00 | Итог

т.е. для каждой Т.У. таблица по-часовой статистики за месяц.

каждая строка отрачает одини сутки и итог по суткам

Цитата(Tonal @ 26.12.2008, 11:29) *
Напиши себе наследника TableModel, который эти преобразования делает налету и будет тебе щастье.
была немного другая мысль, сделать прокси модель и вней всю химию делать, а к ней прицепить представление. Сейчас у меня представление к SQL-модели прицеплено, а сама модель процедуру завёт.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 26.12.2008, 11:15
Сообщение #16


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Т.е для месяца <800 значений. Нужно очень постараться, чтобы на таких объёмах отчёты тормозили.
Хотя, конечно нет предела совершенству:)

Ну а про модель - можно и проксёй, особенно, если нужно отображать и исходные данные и просчитанные.
Если только просчитанные, то я бы напрямую из запроса/хп тягал.

Хотя, я бы всё равно сделал уровень данных над базой а уж из него отображал модельками простенькими. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 26.12.2008, 11:16
Сообщение #17


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Litkevich Yuriy @ 25.12.2008, 19:46) *
ли ты имеешь в виду, что запустить можно на некой соседней машине?

в том числе, но и проц может быть многоядерным
Цитата(Litkevich Yuriy @ 25.12.2008, 20:12) *
я над этим тоже пока голову ломаю. Дело в том что формулы содержат параметры, а они могут менятся. Например кол-во импульсов на кВт*ч для эл.счетчика. однако счетчики иногда выходят из строя и надо ставить новый. Тогда нужно забить новое начальное показание счетчика и его коэффициент.

этож просто параметры
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.12.2008, 11:20
Сообщение #18


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Tonal @ 26.12.2008, 14:15) *
уровень данных над базой
что значит над базой?

Цитата(Tonal @ 26.12.2008, 14:15) *
Нужно очень постараться, чтобы на таких объёмах отчёты тормозили.
я использую вариант который привел в теме FireBird: как преобразовать строки в столбцы?

Цитата(kuler @ 26.12.2008, 14:16) *
этож просто параметры
ну и что, их можно рассматривать как теже оперативные данные, только меняются с другой скоростью (не синхронно)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 26.12.2008, 11:21
Сообщение #19


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 26.12.2008, 11:20) *
Цитата(Tonal @ 26.12.2008, 14:15) *
уровень данных над базой
что значит над базой?

Значит, что приложение, которое будет обрабатывать данную ситуацию.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 26.12.2008, 15:06
Сообщение #20


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Цитата(Litkevich Yuriy @ 26.12.2008, 14:20) *
Цитата(Tonal @ 26.12.2008, 14:15) *
уровень данных над базой
что значит над базой?

Это значит некоторый свой, по возможности, независимый от Qt набор классов и контейнеров для нужных тебе данных и преобразований над ними.
Делается GUI, который всё это добро отображает.
Далее, делается связь этого добра с базой и/или непосредственно с прибором, чтобы можно было загружать данные.

Т.е. ты в GUI ничего не знаешь о том откуда пришли эти данные и знать не хочешь.
А при работе с базой тебе поровну что, как и где там будет отображаться. :)
Т.е замена базы или её структуры не затронет GUI.
Кроме того, можно вместо гуя делать какие-то другие штуки - например какой-нибудь анализ и кластеризацию без учёта того как устроена база и есть ли она вообще. :)

П.С. Кстати, этот слой и называют "слоем прикладной логики" или "бизнес логики". :)

Сообщение отредактировал Tonal - 27.12.2008, 7:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 1.6.2025, 17:59