2011-04-21 34 views
1

我們正在設計一個數據庫(SQLServer 2005)來存儲我們儀器的測量數據。每一個儀器每秒都會返回5個不同的值(所有浮點數) - 例如max,min,avg等。在設計數據庫時,最好將所有這些值存儲在一個表中(每行包含時間戳,類型和值),還是將它們存儲在單獨的表中(即:avgtable,maxtable,mintable),每行包含一個時間戳和值?我們將存儲來自多達100個儀器的數據,並且它們將一次運行數月,所以數據將會變得相當大。所有值的單個表或每個值的單獨表?

一種設計是否比其他設計有更好的性能?

感謝

回答

0

你所有的1臺更好的,否則你必須加入表一起看一個單一的測量和重複的日期時間和可能的其他領域也將導致多數據庫較大。連接表是昂貴的一點。建議還使用主鍵字段,如bigint IDENTITY(1,1),以便您可以通過ID引用記錄以便更快地搜索。

+0

如果我將所有內容都存儲在一張表中,則每次測量需要5行,每行仍需要時間戳和類型標識符。由於收集數據的性質,並非所有儀器都會返回全部5種數據類型,因此我們不希望條目包含5個字段,而是需要一個數據點條目。將所有東西放在一起還有意義嗎? – Curtis 2011-04-21 15:12:52

+0

取決於您如何閱讀它。如果您只是一次訪問一條信息,那麼請儘量使用每個測量類型的一個表格,然後表格名稱也會告訴您測量的類型。如果您想要一次讀取所有5個相關的測量值以進行顯示或搜索,那麼爲5種測量類型適當命名的時間戳和5列的1個表格都可以做到這一點。 – 2011-04-21 15:18:55

1

存儲每個測量值可能不是一個好主意。大多數(不是全部)時間序列數據是高度重複的,並且通常僅記錄測量中的開始時間和結束時間的變化就足夠了,或者採用其他壓縮和編碼方法。

查看Process Historian和複雜事件處理(CEP)系統,瞭解不同的系統在使用中以及可用的技術。有很多工具和技術可用於支持您的類型。 OSISoft,StreamBase和Oracle CEP是一些可用的軟件包。由於您是微軟客戶,您可能還會對微軟的CEP產品感興趣:SQLInspect。

相關問題