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

16

我需要一种方法来对数百GB的数据进行键值查找。最好是基于分布式哈希表的解决方案,并且与Java相容。它应该具有容错能力,并且是开源的。

存储库应该是持久化的,但最好能将数据缓存在内存中以加快速度。

它应该能够支持来自多台机器的并发读写(尽管读操作会比写操作频繁100倍)。基本上这个目的是为了在Web服务中快速进行用户元数据的查找。

有人可以推荐一些东西吗?


你优化的目标是什么?例如,读取吞吐量(从多台机器并发读取),在机器不可用时容错性,少量机器...你还需要写入吗? - Alexander
谢谢,我已经编辑了问题并添加了这些信息。 - sanity
你想如何分配你的数据?所有数据是否应该在每个节点上都可用/可访问/可从中获取?如果是第一种情况,那么下一个问题就是“为什么要进行分布式查找?” - Alexander
10个回答

12
你可能想要查看Hazelcast。它是分布式/分区的,超级轻量级,易于使用且免费。
java.util.Map map = Hazelcast.getMap ("mymap");
map.put ("key1", "value1");

敬礼,

- talip


8

Open Chord是Java中CHORD协议的一种实现。它是一个分布式哈希表协议,完全符合您的需求。


2

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


1

谢谢,我已经添加了一个需要持久化的注释,我认为这排除了memcached。 - sanity
Memcached 也是我首先想到的,但“几百GB”的内存有点太多了。 - Javier

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

0
OpenChord听起来很有前途;但我也会考虑BDB或任何其他非SQL哈希表,使其分布式可以非常容易(如果存储节点的数量(几乎)是恒定的),只需在客户端上对密钥进行哈希处理即可获得适当的服务器。


0

nmdb看起来正是你所需要的。它是一个分布式、内存缓存,带有持久化的磁盘存储。目前支持的后端包括qdbm、Berkeley DB和(在向开发人员发送快速电子邮件后最近添加的)Tokyo Cabinet。但键/值大小受限,但我相信如果你不需要TICP支持,这个限制就可以解除。


0

尝试使用Redisson中的分布式Map结构,它基于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();

-1
DNS具备这种能力,我不知道你的每个记录有多大(8GB的大量小数据?),但它可能有效。

DNS假定一个分层数据结构,恐怕它不能满足我的需求。 - sanity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接