У нас очень похожая система. Мы собираем данные с производственного / аналитического оборудования, обрабатываем необработанные данные с помощью наших алгоритмов и сохраняем результаты нашей обработки в стандартном формате в нашей базе данных 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, но это может быть моим предвзятым отношением - преобразование необработанных данных в анализируемые данные кажется более «ориентированным на приложения», чем задача базы данных.