2009-06-26 13 views
2

私は新しい実験室データベースを設計しています。すべてのテストの生の結果をまとめて保存したい。ただし、結果は単一の測定値または未処理の波形のいずれかになります。 (再演のフッターを参照してください)Oracleに波形を保存

どちらのケースが理想的ですか? ...またはあなた自身の理想的なオプションを提供してください。

TEST 
    test_id* 
    (other TEST fields) 

OPTION 1:以外オプション1

TEST (1 -- many) MEASUREMENT (1 -- many) RECORDING_POINT 
OPTION 1同じ

から重複共通フィールド:
別個の単一の値と波形が

TEST (1 -- many) MEASUREMENT 
    (\-- many) RAW_HEADER 1 -- many RAW_POINT 

MEASUREMENT    RAW_HEADER 
    measurement_id*   raw_header_id* 
    test_id (FK)   test_id (FK) 
    rec_time as DATE  start_time as DATE 
    measurement    sample_rate 

         RAW_POINT 
          raw_header_id* (FK) 
          point_index* 
          raw_measurement 

OPTION 2をもたらします        MEASUREMENTmeasurement信号についてはsample_rate
        RAW_POINTある:measurement_id* (FK)
        RAW_HEADERに変更raw_header* (FK):BLOB TEST(に
エンコード信号:

オプション3を必要としません1 - 多数)測定

単一値measurementについて
MEASUREMENT 
    measurement_id* 
    test_id (FK) 
    rec_time as DATE 
    measurement 
    signal as BLOB 

は測定値であり、signalは信号measurementについてNULL
はsample_rateとsignal格納する符号化データ点

OPTION 4である:重複共通フィールドが、使用BLOBS

TEST (1 -- many) MEASUREMENT (1 -- many) RAW_DATA 

MEASUREMENT    
    measurement_id*  
    test_id (FK)   
    rec_time as DATE  
    measurement 

RAW_DATA   
    measurement_id* (FK) 
    raw_data as BLOB 

単一の値の場合measurementはです信号measurement sample_rateある

凡例 :アスタリスクが続く

  • __*_フィールドは 完全なプライマリキーです。
  • (FK)フィールドの後に(FK)が続くフィールドには、外部キー制約があることを示します。
  • ____特に指定のない限り、すべてのフィールドはNUMBERのタイプです。

その他インフォメーション: 生波形データはいくつかの方法で使用されます。 - プロット(プロッ​​トが右に見えるん) - (より良いプレゼンテーションのために)平滑化/フィルタリング - 値(時刻を取得最大値、最小値、立ち下がり時間など)

また、データは複数のチャネルで同時に取得されます。チャネル1が最初に500に達すると(何らかのユニットの)チャネル2の値が何であるかを知ることは有用であろう。

波形には、通常、約4,000 - 25,000データポイントがあります。

その他の考え/質問: BLOBの一部は返されますか?言い換えれば、4000バイトで始まる4バイトを引き出すことができますか?

値は、Oracle自体で読み取ることができるように、ブロブは、パックのOracleタイプのものとすることができる(すなわち:MAX、MINなどを得るために)

注:これはとGeneral Oracle Data Collection Storageの再投稿ですより良いオプションを開発。

+0

私は単一の値と信号を分離するので、オプション1が好きです。 raw_point_idを追加してRAW_HEADERにデータポイントの数を格納すると、データポイントをより早く取得できます。 オプション2は、すべてを1か所に配置する共通のフィールドを組み合わせています。 オプション3について、私が間違っている場合は私を修正してください。 BLOBに格納された生データを他の計算で使用するためにデコードするのは、(プログラムの取得ではなく)Oracleにとって難しいことです。 – Steven

+0

典型的な波形の何ポイントですか? – DCookie

+0

4000 - 25000(編集の主な質問を参照) – Steven

答えて

3

信じられないかもしれませんが、確かに言うには十分な情報があります。たとえば、結果は通常どのように処理されますか?彼らはプロットされるのだろうか、あるいは何らかの数値分析が行われるだろうか?波形の大きさはどれくらいですか?

生の結果が通常小さい場合を除いて、このアプリケーションではオプション1が嫌いです。 1つのデータポイントを格納するために多くのストレージオーバーヘッドがあります。それほどではないにせよ、同じ異論はオプション2.

オプション3に適用される

は、私はおそらく行く方法です。私は一度、波形ごとに数百万点の落雷による波形を表示するアプリを開発しました。その種のデータセットのBLOBだけが実行可能なオプションです。そして、(未知数の一部に応じて)私は真剣にデータをバイナリの浮動小数点数または倍精度として格納し、javaまたは外部のCプログラムで処理することを検討します。真剣に、個々のデータポイントへの鍵となるアクセスが必要ですか?配列を上に読み込まず、索引付けする方がはるかに単純でコンパクトで効率的ですか?

+0

質問はメインの質問に編集で回答しました。あなたの考えは? – Steven

0

これらのデータは後でどのように分析しますか?

後でFFTなどをやっていると仮定すると、オプション3に進むだけで簡単で高速になります。

関連する問題