2012-09-18 42 views
3

我需要維護存儲大量計數器的小時表。我計劃隨時保留當前的小時表和前一小時的表格,因爲較舊的數據對我而言並不重要。維護小時表NoSql

例如,如果時間是下午4點30分,我將在下午3點到4點有一張小時表,當前小時表從下午4點到4點30分。一旦時間過了下午5點,我刪除了3:00-4:00點的桌子。

每個小時表將增長到7-8 gb的最大大小,並且查詢是高度併發和麪向寫的(10:1寫入:讀取,每秒20,000次寫入和平均每秒2000次讀取)。因爲數據的大小很小(我的數據庫中最大10GB)並且所有查詢都是計數器增量,所以我應該使用像Cassandra(計數器列)這樣的關鍵val存儲區還是像Redis一樣的內存數據庫。 (我打算分區數據庫拆分巨大的寫入負載)?

謝謝。

回答

1

這聽起來像是在內存中處理一個任務:HashMap的比最快的數據庫快得多。所以,我建議看看hazelcast(http://www.hazelcast.com/)或風暴(https://github.com/nathanmarz/storm)。

定期傾銷櫃檯,一些內存數據庫(如Redis的或Memcached的)的可能作出的,使查詢簡單。但純粹在內存中是可行的,根本沒有任何數據庫後端。

Cassandra對於這項任務看起來像是一種矯枉過正的行爲:當您需要以複製和高可用方式永久存儲千兆字節的數據時,這是驚人的,但如果您之前從未做過,則將其設置爲重負載並不是微不足道的。

+0

感謝您的回覆!我唯一關心的是如果我的機器能夠處理巨大的查詢負載(每秒30000次,在峯值時每秒讀取3000次)。另外,假設我必須擴展到每秒可寫100000次寫入數據,使用redis或cassandra會不會更輕鬆? – amaron

+1

Redis還爲可以自動清理舊數據的密鑰提供了過期/ TTL密鑰。 –

+0

Amaron,無論是榛皮還是風暴,都能完美地適應數十臺和數百臺機器。我的觀點是,如果內存中的解決方案比數據庫快10倍,並且性能同樣好,那麼在同樣的負載下,您將需要少10倍的機器。我認爲內存數據網格比數據庫更容易部署和擴展。 – Wildfire