16

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

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

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

任何人都可以推荐任何东西吗?

4

10 回答 10

12

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

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

问候,

-塔利普

于 2008-10-29T17:10:45.563 回答
8

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

于 2008-10-13T15:40:02.780 回答
2

根据用例,Terracotta可能正是您所需要的。

于 2008-10-15T01:11:52.580 回答
1

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

于 2008-10-13T15:37:05.377 回答
0

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

于 2008-10-13T15:51:02.197 回答
0

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

于 2008-10-13T15:55:59.533 回答
0

Java 中的开源缓存解决方案

Oracle Coherence(以前是 Tangosol)

JCache JSR

于 2008-10-14T02:30:01.813 回答
0

nmdb听起来正是您所需要的。分布式,在内存缓存中,具有持久的磁盘存储。当前的后端包括 qdbm、berkeley db 和(最近在给开发人员的快速电子邮件后添加)tokyo cabinet。虽然键/值大小是有限的,但我相信如果您不需要 TICP 支持,可以取消它。

于 2008-10-23T08:32:27.087 回答
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();
于 2014-01-12T10:32:35.127 回答
-1

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

于 2008-10-13T15:37:27.170 回答