2010-07-21 25 views
3

如果我需要一個擁有數十億個對象的數據庫,並且需要隨時立即(或幾乎立即)訪問數據庫中的任何項目,那麼最佳解決方案是什麼?處理數十億條信息的存儲?

這個數據庫將被詢問每秒約1000個請求。數據庫中的行幾乎不相關,因此不需要是關係數據庫。

如果你很好奇爲什麼,它是模擬移動元素。

我在想像一些Cassandra的負載平衡羣集,它們通過一個負載均衡的Web服務器羣集來訪問。

錢是一個因素,所以越便宜越好。軟件或工具沒有限制,但必須是開源的。

只是尋找一種數據庫解決方案,可以很好地處理大量用戶的荒謬數據量(根本不需要關係數據庫)。

它是至關重要的,它處理冗餘和失敗。

只是一個高層次的想法,讓我在正確的方向將是偉大的。

+0

平均而言,1000 req/sec需要從您的數十億收集多少個物體?由不同請求選擇的數據之間會有多少相關?億元以上的物品有多大?如何識別物體? – 2010-07-21 17:46:21

+0

每個請求說10或20。沒有關聯(有,但會計算客戶端)。每個對象實際上只是說10個純文本屬性和3D位置數據。這些對象將通過一個唯一的鍵來標識(或者如果用戶被限定在特定的位置),他們需要能夠看到X單元內的所有對象(所以需要能夠查詢數據庫中的結果在X,Y和Z的範圍內。其他屬性也可以被查詢,但只會導致返回大約10到20或100個對象)。 – jreid42 2010-07-21 17:57:43

+0

澄清你不能說給我所有的屬性z ==這個對象。它總是......給我X,Y,Z 200個單位內的所有對象......然後你可以通過它們的屬性進行額外的過濾(但是這可以在客戶端完成,因爲不會有那麼多地區)。 – jreid42 2010-07-21 17:59:39

回答

0

既然你需要能夠有效地獲得三維間隔(X_min < = X_obj < = X_MAX & Y_MIN < = Y_obj < = Y_MAX & Z_min < = Z_obj < = Z_max)中的所有對象,我不知道像Cassandra這樣的關鍵價值商店會如何適合你。可能值得看看MongoDB,因爲我相信這可以讓你根據間隔索引多個字段和查詢。

+0

我聽說MongoDB在保護數據方面不是最好的。 – jreid42 2010-07-22 22:44:45

+0

在良好的條件下,MongoDB和任何其他數據庫一樣好。它確實承認硬件出現故障,除非您擁有兩臺或三臺不同機器上的數據,否則無法確定其安全性。 – 2010-07-25 21:01:11

+0

Cassandra還允許索引多個字段並基於間隔進行查詢。 – 2012-04-26 21:43:43

1

要考慮的一個選擇是將3D座標映射到space-filling curve,將點有效地表示爲單個值。然後,您可以運行Cassandra的範圍查詢來獲取某個區域中的點。

我以前在2D空間中看到過這個實現,我相信它在3D中也是可行的。