2009-06-26 65 views
2

我正在設計一個新的實驗室數據庫。我想一起存儲所有測試的原始結果。但是,結果可以是單個測量或原始波形。 (轉貼請參閱頁腳)在Oracle中存儲波形

下面哪種情況是理想的(以及爲什麼)? ...或提供您自己的理想選擇。

TEST 
    test_id* 
    (other TEST fields) 

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 

選項2:從選項重疊共用字段1

TEST (1 -- many) MEASUREMENT (1 -- many) RECORDING_POINT 

OPTION 1除了:
        MEASUREMENTmeasurement爲信號是SAMPLE_RATE
        RAW_POINTraw_header* (FK)改變爲measurement_id* (FK)
        RAW_HEADER:不需要

OPTION 3:編碼信號轉換成BLOB TEST( 1 - 許多)測量

MEASUREMENT 
    measurement_id* 
    test_id (FK) 
    rec_time as DATE 
    measurement 
    signal as BLOB 

對於單個值measurement是測量和signalNULL
對於信號measurement是SAMPLE_RATE和signal存儲經編碼的數據點

方案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本身讀取(即:獲得最大值,最小值等)

注:這是General Oracle Data Collection Storage與轉貼更好的選擇。

+0

我喜歡選項1,因爲它將單個值和信號分開。我甚至可以添加raw_point_id並將數據點的數量存儲在RAW_HEADER中以更快地檢索數據點。 選項2結合了常用字段將所有內容放在一起。 關於選項3,並糾正我,如果我錯了。 Oracle(而不是程序檢索)難以解碼存儲在BLOB中的原始數據以用於其他計算。 – Steven 2009-06-26 17:47:11

+0

典型波形中有多少個點? – DCookie 2009-06-26 21:02:27

回答

3

不管你信不信,我不認爲這裏有足夠的信息可以肯定地說。例如,通常如何處理結果?他們會被繪製,或者可能對他們進行某種數字分析?你的波形有多大?

除非您的原始結果通常很小,否則我不喜歡此應用程序的選項1。存儲一個數據點有很多存儲開銷。

在較小的程度上,同樣的反對意見適用於選項2

方案3是我可能會走的路。我曾經開發過一個應用程序,用於查看來自雷擊的波形 - 每個波形有數百萬個點。唯一可行的選擇是用於那種數據集的BLOB。 (再次,根據一些未知數)我會認真考慮將數據存儲爲二進制浮點數或雙精度數據,並使用java或外部C程序處理它們。嚴重的是,你需要密鑰訪問你的個人數據點嗎?是不是將數組加載並索引到更簡單,更緊湊和更高效?

0

以後如何分析這些數據?

假設你正在做FFT或類似的事情,只要去選項3 - 它會更容易,更快。