лучшее место для логики обработки данных с архитектурой .NET / Oracle - PullRequest
3 голосов
/ 24 августа 2009

Я программист .NET и занимаюсь разработкой системы, которая собирает производственные данные в реальном времени и сохраняет их в базе данных Oracle. Данные должны будут подвергаться обширной обработке: по существу, цифровая обработка сигналов - поиск минимальных и максимальных значений различных полей в потоке данных и соответствующая категоризация «порций» времени. По-видимому, это то, что мы могли бы (хотя и не обязательно) использовать для обработки библиотеки MatLab.

Что мне нужно знать, это где найти логику обработки: внутри базы данных Oracle, реализованной с использованием PL-SQL (или чего-либо подходящего), или во внешнем исполняемом файле .NET или службе, которая может вызывать библиотеки MatLab?

Смежный вопрос: можно ли вызывать функции библиотеки MatLab из Oracle? Это может дать самый краткий ответ.

Извините за блок текста. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 24 августа 2009

В идеале вы должны сравнить оба варианта и посмотреть, какую производительность вы можете получить, используя оба варианта.

Лично я склонен к тому, что обработка данных происходит в базе данных, если нет веской причины делать это где-либо еще - базы данных предназначены для быстрой обработки больших кусков данных. Однако в вашем случае может быть веская причина сделать это в другом месте, потому что MatLab вполне может иметь превосходные библиотеки для цифровой обработки сигналов. Если вы просто ищете минимумы и максимумы, маловероятно, что MatLab будет более эффективным, чем Oracle, и, конечно, этого будет недостаточно для преодоления затрат на перенос набора данных из базы данных для обработки и последующего перемещения результатов обратно в Если вы выполняете более сложную обработку - если вам нужно выполнить быстрые преобразования Фурье (FFT) и тому подобное - вам, вероятно, гораздо лучше использовать поставляемые библиотеки в MatLab, чем пытаться строить логику FFT в PL / SQL.

Если ваша база данных Oracle работает в операционной системе, в которой также будет работать MatLab, и MatLab может предоставить API-интерфейс в стиле C для своих API (если нет, я уверен, что вы могли бы поместить тонкий слой .Net поверх MatLab для создания C DLL), то вы можете вызывать функции MatLab как внешние процедуры из Oracle.

0 голосов
/ 24 августа 2009

У нас очень похожая система. Мы собираем данные с производственного / аналитического оборудования, обрабатываем необработанные данные с помощью наших алгоритмов и сохраняем результаты нашей обработки в стандартном формате в нашей базе данных Oracle.

Если вы используете Matlab для обработки, это звучит так, как будто вы даже более интенсивно занимаетесь математикой, чем мы, но мы все же решили управлять всей обработкой данных в наших внешних приложениях. Наша схема выглядит примерно так:

CREATE TABLE RawData
  (
   RawDataId            NUMBER(22) DEFAULT Null NOT NULL, (PK)
   RawDataType          VARCHAR2(50) DEFAULT Null NOT NULL,
   ExposureToolId       NUMBER(22) DEFAULT Null NULL,
   EventTime            DATE DEFAULT Null NULL,
   ... ( various columns descibing event characteristics) ...
   Body                 LOB DEFAULT Null NOT NULL,
   Length               NUMBER DEFAULT 0 NULL
  )

CREATE TABLE Analysis
  (
   AnalysisId       NUMBER(22) DEFAULT Null NOT NULL, (PK)
   RawDataId        NUMBER(22) DEFAULT Null NOT NULL,
   AnalysisName     VARCHAR2(255) DEFAULT Null NOT NULL,
   AnalysisType     VARCHAR2(255) DEFAULT Null NOT NULL,
   AnalyzeTime      DATE DEFAULT Null NULL,
   Status           CHAR(1) DEFAULT Null NULL,
   SentToServerDate DATE DEFAULT Null NULL,
   ServerId         NUMBER(22) DEFAULT Null NULL
  )

CREATE TABLE DataSet
  (
   DataSetId        NUMBER(22) DEFAULT Null NOT NULL, (PK)
   AnalysisId       NUMBER(22) DEFAULT Null NOT NULL,
   DataSetName      DATE DEFAULT sysdate NULL
  )

CREATE TABLE Coefficient
  (
   DataSetId            NUMBER(22) DEFAULT Null NOT NULL, (PK)
   IdentifierId         NUMBER(22) DEFAULT Null NOT NULL, (PK)
   Coefficient          FLOAT DEFAULT 0 NULL
  )

Собранные данные из инструментов поступают в таблицу RawData, и в то время как в таблице анализа создаются записи заголовка, указывающие, что данные требуют обработки, с указанием имени анализа и сервера, который будет выполнять обработка; статус установлен на «Ожидание». Затем серверу отправляется сообщение для выполнения работы, и когда он сохраняет результаты (в таблице коэффициентов, сгруппированных по наборам данных), состояние устанавливается на «Готово» (или «Ошибка», если мы столкнулись с проблемой). Когда серверные компоненты запускаются, они запрашивают таблицу анализа для любой ожидающей работы; таким образом мы гарантируем, что в случае сбоев не будет потеряно работы.

Это наша модель уже более десяти лет, и она работает очень хорошо. Легко развертывать и поддерживать различные версии серверных модулей; по моему мнению, управлять исполняемыми файлами таким способом проще, чем компилировать пакеты на сервере Oracle, но это может быть моим предвзятым отношением - преобразование необработанных данных в анализируемые данные кажется более «ориентированным на приложения», чем задача базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...