我需要一种方法来对(可能)数百 GB 的数据进行键值查找。理想情况下,基于分布式哈希表的东西可以很好地与 Java 配合使用。它应该是容错的,并且是开源的。
存储应该是持久的,但理想情况下会将数据缓存在内存中以加快速度。
它应该能够支持来自多台机器的并发读取和写入(尽管读取将是常见的 100 倍)。基本上,目的是对 Web 服务的用户元数据进行快速初始查找。
任何人都可以推荐任何东西吗?
我需要一种方法来对(可能)数百 GB 的数据进行键值查找。理想情况下,基于分布式哈希表的东西可以很好地与 Java 配合使用。它应该是容错的,并且是开源的。
存储应该是持久的,但理想情况下会将数据缓存在内存中以加快速度。
它应该能够支持来自多台机器的并发读取和写入(尽管读取将是常见的 100 倍)。基本上,目的是对 Web 服务的用户元数据进行快速初始查找。
任何人都可以推荐任何东西吗?
你可能想看看Hazelcast。它是分布式/分区的,超级精简,简单且免费。
java.util.Map map = Hazelcast.getMap ("mymap");
map.put ("key1", "value1");
问候,
-塔利普
Open Chord是CHORD协议的 Java 实现。它是一个分布式哈希表协议,应该可以完美地满足您的需求。
根据用例,Terracotta可能正是您所需要的。
您可能应该指定它是否需要持久化,是否需要在内存中等等。您可以尝试:http ://www.danga.com/memcached/
分布式哈希表包括 Tapestry、Chord 和 Pastry。其中之一应该适合您的需求。
OpenChord 听起来很有希望。但我也会考虑BDB或任何其他非 SQL 哈希表,使其分布式可能非常容易(如果存储节点的数量(至少)是(几乎)恒定的),只需对客户端上的密钥进行哈希处理即可合适的服务器。
nmdb听起来正是您所需要的。分布式,在内存缓存中,具有持久的磁盘存储。当前的后端包括 qdbm、berkeley db 和(最近在给开发人员的快速电子邮件后添加)tokyo cabinet。虽然键/值大小是有限的,但我相信如果您不需要 TICP 支持,可以取消它。
尝试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();
DNS 有能力做到这一点,我不知道您的每条记录有多大(8GB 吨小数据?),但它可能会起作用。