Wir haben ein sehr ähnliches System. Wir sammeln Daten aus Fertigungs-/Analysegeräten, verarbeiten die Rohdaten mit unseren Algorithmen und speichern die Ergebnisse unserer Verarbeitung in einem Standardformat in unserer Oracle-Datenbank.
Wenn Sie Matlab für Ihre Verarbeitung verwenden, klingt es, als ob Sie noch mathematisch intensiver sind als wir, und dennoch haben wir uns entschieden, die gesamte Datenverarbeitung in unseren externen Apps zu verwalten. Unser Schema sieht im Grunde so etwas wie folgt aus:
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
)
Die gesammelten Daten von den Werkzeugen geht in die RawData Tisch, und zu der Zeit ein Kopfsatz (s) in der Analyse-Tabelle erstellt, die anzeigt, dass die Datenverarbeitung benötigt, zeigt den Namen der Analyse und den Server an, der die Verarbeitung durchführt; Der Status ist auf "Ausstehend" eingestellt. Der Server erhält dann die Nachricht, um die Arbeit auszuführen, und wenn er die Ergebnisse speichert (in der Koeffiziententabelle nach Datasets gruppiert), wird der Status auf "Fertig" gesetzt (oder "Fehler", wenn ein Problem auftrat). Wenn die Serverkomponenten gestartet werden, fragen sie die Analysetabelle nach ausstehenden Aufgaben ab. Auf diese Weise stellen wir sicher, dass bei Abstürzen keine Arbeit verloren geht.
Dies ist seit über zehn Jahren unser Modell, und es funktioniert wirklich gut.Es ist einfach, verschiedene Versionen der Servermodule bereitzustellen und zu verwalten. Meiner Meinung nach ist es einfacher, ausführbare Dateien auf diese Weise zu verwalten, als Pakete auf dem Oracle-Server zu kompilieren, aber das könnte nur mein Vorurteil sein - die Konvertierung von rohen zu analysierten Daten scheint eher "app-zentriert" als eine Datenbankaufgabe.
gute Antwort im Allgemeinen und +1 für die Erwähnung von Oracle extprocs, eine weniger bekannte Funktion – dpbradley
Danke für die Antwort! Zwischen dieser Antwort und der untenstehenden ist es ziemlich klar, dass - wie bei den meisten Dingen - die beste Route sehr von den Einzelheiten abhängt, was wir erreichen wollen. Wir sind nicht an MatLab gebunden, aber ich hatte gehofft, dass die vorgefertigten Funktionen für das Zahlen-Crunching etwas Zeit sparen könnten. Es kann sich herausstellen, dass wir nicht einmal auf die Funktionen als extprocs zugreifen können, also kann es PL-SQL sein. – Klay
Wenn Sie sich selbst erschrecken möchten, gewann Alberto Dell'Era die NOCOUG SQL-Herausforderung mit einer Lösung, die FFT mit der MODEL-Klausel implementiert :: http://www.adellera.it/investigations/nocoug_challenge/index.html – APC