需要一个分布式键值查找系统

我需要一种方法来跨越(可能)数百GB的数据进行键值查找。 理想情况下基于分布式哈希表的东西,可以很好地与Java一起使用。 它应该是容错的,并且是开源的。

商店应该是持久的,但理想情况下会将数据缓存在内存中以加快速度。

它应该能够支持来自多台机器的并发读取和写入(读取将是100倍更常见)。 基本上,目的是快速初始查找Web服务的用户元数据。

谁能推荐任何东西?

你可能想看看Hazelcast 。 它是分布式/分区的,超级精简,简单而且免费。

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

问候,

-talip

Open Chord是Java中CHORD协议的实现。 它是一个分布式哈希表协议,可以完美地满足您的需求。

根据使用情况, Terracotta可能正是您所需要的。

您可能应该指定它是否需要持久化,内存与否等等。您可以尝试: http : //www.danga.com/memcached/

分布式哈希表包括Tapestry,Chord和Pastry。 其中一个应该适合您的需求。

OpenChord听起来很有希望; 但我也会考虑BDB或任何其他非SQL哈希表,使其分布式变得简单(如果存储节点的数量至少是(几乎)不变),只需在客户端上对哈希值进行哈希处理即可获得适当的服务器。

Java中的开源缓存解决方案

Oracle Coherence (曾经是Tangosol)

JCache JSR

nmdb听起来就像你需要的那样。 分布式,在内存缓存中,具有持久的磁盘存储。 目前的后端包括qdbm,berkeley db和(最近在向开发人员发送电子邮件后添加) 东京内阁 。 键/值大小有限,但我相信如果你不需要TICP支持,可以取消。

从Redisson尝试分布式Map结构,它基于Redis服务器。 使用Redis群集配置,您可以跨1000个服务器分割数据。

用法示例:

 Redisson redisson = Redisson.create(); ConcurrentMap map = redisson.getMap("anyMap"); map.put("123", new SomeObject()); map.putIfAbsent("323", new SomeObject()); map.remove("123"); ... redisson.shutdown(); 

DNS有能力做到这一点,我不知道你的每条记录有多大(8GB吨的小数据?),但它可能有效。

Interesting Posts