【问题标题】:Key-value store for Ruby & JavaRuby 和 Java 的键值存储
【发布时间】:2016-07-08 23:26:59
【问题描述】:

我需要关于键值存储的推荐。这是我的标准:

  1. 不必持久化,但需要支持大量记录(记录很小,100-1000 字节)
  2. 插入 (put) 只会偶尔发生,总是在大型数据集中(批量)
  3. Get 将是随机的,需要快速
  4. 客户端将使用 Ruby,也可能使用 Java
  5. 应该相对容易设置并且需要尽可能少的维护

【问题讨论】:

    标签: nosql key-value-store


    【解决方案1】:

    Redis 听起来很适合在这里使用。它都在内存中,所以速度非常快(GETSET 操作都是 O(1))并且它同时支持 RubyJava 客户端。

    【讨论】:

    • 关于它如何处理批量插入的任何经验(例如,我是否能够在插入数百万条记录时对其进行查询)?
    • 您绝对可以在插入时进行查询 - 一切都在内存中,因此不会出现磁盘抖动。它还具有流水线 (redis.io/topics/pipelining) 功能,这意味着您可以流式传输批量插入,而无需等待每个单独的结果返回
    • 只是用一些真实数据玩 Redis。性能真的很棒,到目前为止我们唯一的问题是偶尔崩溃,这似乎是在内存耗尽时发生的。我们可能需要在 Redis 和 box 设置方面稍作尝试。
    • 我们现在已经成功使用 Redis。崩溃是由于 32 位版本的约 3GB 内存限制,迁移到 64 位解决了这个问题。
    【解决方案2】:

    Aerospike 将是完美的,原因如下:

    1. 基于 Java 和 Ruby 客户端的键值。
    2. 吞吐量:优于 Redis/Mongo/Couchbase 或任何其他 NoSQL 解决方案。请参阅此http://www.aerospike.com/blog/use-1-aerospike-server-not-12-redis-shards/。亲眼看到它在超过 300k 读取 TPS 和 100k 写入 TPS 的情况下运行良好。
    3. 使用 RIPEMD160 自动高效地进行数据分片、数据重新平衡和数据分发。
    4. 在发生故障转移和/或网络分区时的高可用性系统。
    5. 从 3.0 版本开源。
    6. 可以在没有持久性的缓存模式下使用。
    7. 支持 LRU 和 TTL。
    8. 很少或无需维护。

    【讨论】:

      【解决方案3】:

      AVL-Tree 将在插入、删除、搜索和其他大多数事情上为您提供 O(log n)。

      【讨论】:

      • 我很确定那里有很多可靠且经过验证的解决方案,我并不是真的要自己重新发明轮子。
      • 我想我误解了你的要求。对不起。
      【解决方案4】:

      1 和 3 都使用数据库引擎。

      如果您的记录数量不高,并且您只有一个客户端同时使用这个东西,我个人会推荐 sqlite,它适用于 Java 和 Ruby(也可以通过 #5)。否则,请使用真正的数据库系统,例如 MySql(因为您不在 Microsoft 堆栈中)。

      【讨论】:

      • 1 和 3 都被流行的 nosql 解决方案很好地支持,不知道为什么 RDBMS 会更合适。另外,记录的数量很大(百万),还会有并发读取。
      猜你喜欢
      • 1970-01-01
      • 2012-04-21
      • 2012-06-18
      • 2017-05-02
      • 2015-12-09
      • 1970-01-01
      • 2015-01-10
      • 2011-12-24
      • 1970-01-01
      相关资源
      最近更新 更多