2011-06-08 45 views
4

我需要一個關鍵值存儲的建議。這裏是我的準則:Ruby和Java的鍵值存儲

  1. 不必是持久的,但需要支持大量的記錄(記錄是小,100-1000字節)
  2. 插入(put)將在大型數據集只是偶爾發生,總是(散裝)
  3. Get將是隨機的,並且需要快速
  4. 客戶端將在Ruby和,也許Java的
  5. 它應該是比較容易安裝和使用需要儘可能
  6. 少維護

回答

6

Redis聽起來像在這裏使用的正確的東西。它全部在內存中,因此速度非常快(GETSET操作都是O(1)),並且它同時支持RubyJava客戶端。

+0

關於它如何處理批量插入的任何經驗(例如,插入數百萬條記錄時我能夠查詢它)? – 2011-06-08 14:25:49

+0

你一定能夠在插入時進行查詢 - 一切都在內存中,所以沒有磁盤抖動。它還具有流水線(http:// redis。io/topics/pipelining),這意味着您可以在不等待每個單獨的結果返回的情況下通過批量插入進行流式處理 – 2011-06-08 14:27:30

+0

只需使用Redis與一些真實數據一起玩即可。性能非常好,我們迄今爲止唯一遇到的問題是偶爾會崩潰,這在內存耗盡時似乎正在發生。我們可能需要使用Redis和盒子設置。 – 2011-06-09 18:11:27

0

AVL-Tree會在插入,刪除,搜索和其他所有內容時給你O(log n)。

+0

我很確定有一堆可靠和經過驗證的解決方案,我不是真的在重新發明自己的車輪。 – 2011-06-08 14:08:10

+0

我想我誤解了你所要求的一點。抱歉。 – 2011-06-09 16:57:04

0

1和3都在尖叫數據庫引擎。

如果你的記錄數量不是瘋狂的,而你只有一個客戶端同時使用這個東西,我個人推薦sqlite,它可以與Java和Ruby一起工作(也可以通過#5)。否則,請使用真正的數據庫系統,例如MySql(因爲您不在Microsoft堆棧中)。

+0

1和3都得到流行的nosql解決方案的很好的支持,不知道爲什麼RDBMS會更適合。此外,記錄數量相當大(百萬),並且還會有併發讀取。 – 2011-06-08 14:06:12

5

Aerospike將是一個完美的,因爲以下原因:基於在Java和Ruby提供客戶

  1. 鍵值。
  2. 吞吐量:優於Redis/Mongo/Couchbase或任何其他NoSQL解決方案。看到這個http://www.aerospike.com/blog/use-1-aerospike-server-not-12-redis-shards/。已經親眼看到它可以正常工作,同時具有超過300k讀取TPS和100k寫入TPS。
  3. 使用RIPEMD160進行自動高效的數據分片,數據重新平衡和數據分發。
  4. 故障切換和/或網絡分區情況下的高可用性系統。
  5. 開放源代碼3.0版本。
  6. 可用於沒有持久性的緩存模式。
  7. 支持LRU和TTL。
  8. 很少或沒有維護。