【问题标题】:Need a distributed key-value lookup system需要一个分布式键值查找系统
【发布时间】:2010-09-16 21:57:18
【问题描述】:

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

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

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

有人可以推荐吗?

【问题讨论】:

  • 你在优化什么?例如,读取吞吐量(从多台机器同时读取)、面对机器变得不可用时的容错能力、机器数量少……您还需要写入吗?
  • 谢谢,我已经用这些信息编辑了问题。
  • 您希望如何分发数据?是否所有数据都对每个节点可用/在/从每个节点可用?在第一种情况下,下一个问题是“为什么要进行分布式查找?”。

标签: java database bigtable key-value-store distributed-database


【解决方案1】:

尝试来自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();

【讨论】:

    【解决方案2】:

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

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

    问候,

    -塔利普

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                【解决方案8】:

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

                【讨论】:

                  【解决方案9】:

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

                  【讨论】:

                  • DNS 采用分层数据结构,恐怕它不能满足我的需要。
                  【解决方案10】:

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

                  【讨论】:

                  • 谢谢,我已经添加了一个注释,它需要是持久的,我认为排除了 memcached。
                  • memcached 也是我的第一个想法,但是“百分之一 GB”对于 RAM 来说有点太多了
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-04-02
                  相关资源
                  最近更新 更多