2008-10-13 51 views
16

我需要一種方法來跨越(可能)數百GB的數據執行鍵值查找。理想情況下,基於分佈式哈希表的東西,這與Java很好地協作。它應該是容錯的,而且是開源的。需要一個分佈式鍵值查找系統

商店應該是持久的,但理想情況下緩存數據在內存中加快速度。

它應該能夠支持來自多臺機器的併發讀取和寫入操作(讀取操作將會比通常多出100倍)。基本上,目的是快速初步查找Web服務的用戶元數據。

任何人都可以推薦任何東西嗎?

+0

你在優化?例如,讀取吞吐量(從多臺機器併發讀取),面對機器時的容錯性變得不可用,機器數量少...您是否還需要寫入? – Alexander 2008-10-13 15:38:07

+0

謝謝,我用這個信息編輯了這個問題。 – sanity 2008-10-13 15:41:38

+0

你想如何分配你的數據?是否所有的數據都可以在每個節點上/從/來自哪個節點?在第一種情況下,下一個問題是「爲什麼分佈式查找?」。 – Alexander 2008-10-13 15:56:36

回答

12

您可能想查看Hazelcast。它是分佈式/分區式的,超精簡的,簡單且免費的。

java.util.Map map = Hazelcast.getMap ("mymap"); 
map.put ("key1", "value1"); 

問候,

-talip

-1

DNS必須做到這一點的能力,我不知道有多大每一個你的記錄是(8GB的小數據?),但它可能工作。

8

Open Chord是Java中的CHORD協議的實現。它是一個分佈式哈希表協議,應該完美地滿足您的需求。

0

分佈式哈希表包括Tapestry,Chord和Pastry。其中之一應該適合您的需求。

0

OpenChord聽起來很有前途;但我也會考慮BDB或任何其他非SQL哈希表,使其分佈可能非常容易(如果存儲節點的數量至少是(幾乎)恆定的),只需在客戶端上散列密鑰即可獲得適當的服務器。

2

根據不同的使用情況下,Terracotta可能正是你所需要的。

0

nmdb聽起來像它正是你所需要的。在內存緩存中分佈着持久的磁盤存儲。當前的後端包括qdbm,berkeley db和(最近在給開發者的快速電子郵件後添加)tokyo cabinet。鍵/值的大小是有限的,但我相信如果你不需要TICP支持可以取消。

0

嘗試從Redisson分佈地圖的結構,它基於Redis服務器上。使用Redis羣集配置,您可以跨1000臺服務器分割數據。

用例:

Redisson redisson = Redisson.create(); 

ConcurrentMap<String, SomeObject> map = redisson.getMap("anyMap"); 
map.put("123", new SomeObject()); 
map.putIfAbsent("323", new SomeObject()); 
map.remove("123"); 

... 

redisson.shutdown();