2016-02-15 53 views
0

我有一種情況,我想以數據庫格式存儲大約1TB的信息以支持查詢。我在數據庫設計方面沒有經驗,這部分是爲什麼我想詢問如何正確執行此操作。同一類型的多個表的數據庫設計

我們有一個測試套件,爲每個狀態更新生成一組信息字段。每個狀態更新大約有400個單獨的64位信息字段,我們希望保留大約4億個信息滴答。問題是我們正在從大約1600臺機器接收信息更新。

一個有用的(我們)數據庫查詢,將是格式「我看到這個領域有值X,而提前5次狀態更新,同場有值Y?」

我最初的理解是在數據庫中,其中每個狀態更新被sequencially存儲來實現這個(每臺機器大約25萬美國)。但是,這會產生1600個相同的表格,每個表格大約有250k行。

有一些設計方法,我不明白嗎?我覺得有1600張桌子是一個理想的特質,因爲那感覺就像查詢可以並行運行一樣?

總結:由於有多個相同的計算機上運行的略有不同的測試情況下,我不得不存儲最後250K - 1M狀態蜱他們有,我應該如何設計數據庫?我現在的想法是創建一個每個測試表,其中每一行的時間T表示的狀態,T + 1,T + 2等

這是最佳的?或者有沒有比這樣設計更好的方法?我的查詢需要多長時間才能處理1500-3000個大約250k-1M條目的表(因爲我想查詢整個數據集?)我可以使用不同的方法獲得更好的結果嗎?

1500測試,400個64位變量存儲每個狀態勾號。每次測試250k到1M狀態滴答,我希望能夠快速和有效地存儲和查詢整個數據集。什麼是最好的方法?

+0

你的問題不清楚。 – Fanda

+0

擁有1600個表/集合是沒有意義的。閱讀應始終可以並行進行。由於差異可以表示爲一個字段或字段的組合,我會將所有數據集放入同一個集合中。 –

+0

如果我把所有東西放在一張大桌子裏,我怎麼能區分一次測試結束和下一次測試結束?在保持一張巨大的桌子時,會不會降低表現?我該如何阻止它向我提供重疊測試的查詢?我不希望它給我一個跨越交叉測試的查詢結果 –

回答

1

我總是喜歡單表/集,當每一個測試步驟應該由測試ID和步驟ID來識別。例如:

MySQL的(規格化)

步驟

id test  step  data 
1 "Host_Test" "Step01" [serialized data] 

MySQL的(歸一化(部分地))

步驟

id test  step 
1 "Host_Test" "Step01" 

stepd etails

step_id data_key data_value 
1  "key"  "value" 

的MongoDB

{ 
    _id : "1", 
    test : "Host_Test", 
    step : "Step01", 
    data : { 
     key1 : value1, 
     key2 : value2 
    } 
} 

然後就可以,當然,通過測試標識符標識每個測試數據。

如果在內存測試,將數據存儲到數據庫/光盤將永遠是你的主要弱點。寫一張大桌子/收藏品將不是主要觀點。

+0

有什麼方法可以讓這個更快。實際情況是,對於每個查詢,我感興趣的是看哪些測試滿足條件,以及總共有多少測試滿足每個條件 –

+0

配置數據庫服務器儘可能在內存中工作(延遲磁盤操作)。嘗試查看redis:http://redis.io/。 – Fanda

相關問題