Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java持久键值存储_Java_Cassandra_Hbase_Key Value Store - Fatal编程技术网

Java持久键值存储

Java持久键值存储,java,cassandra,hbase,key-value-store,Java,Cassandra,Hbase,Key Value Store,我知道这可能已经被问了无数次了,但我似乎找不到适合我的确切用例的黄金解决方案 我只有一个数据结构,一个键是字符串的映射。映射的对象是映射本身,但这次的值是简单的对象/原语,如字符串、int、double等。因此,映射的映射。最内层映射的键是恒定的,即,除非在创建时,否则不会从最内层映射中添加/删除任何条目。所以它有点像一个传统的表,尽管每一行可能有任意的列 我需要这个数据结构是持久的和可复制的 以下是我的要求: 纯Java解决方案 磁盘映射仅在重新启动时使用。因此,从不从磁盘进行任何读取,所有写

我知道这可能已经被问了无数次了,但我似乎找不到适合我的确切用例的黄金解决方案

我只有一个数据结构,一个键是字符串的映射。映射的对象是映射本身,但这次的值是简单的对象/原语,如字符串、int、double等。因此,映射的映射。最内层映射的键是恒定的,即,除非在创建时,否则不会从最内层映射中添加/删除任何条目。所以它有点像一个传统的表,尽管每一行可能有任意的列

我需要这个数据结构是持久的和可复制的

以下是我的要求:

  • 纯Java解决方案
  • 磁盘映射仅在重新启动时使用。因此,从不从磁盘进行任何读取,所有写入操作仅由一个应用程序完成)
  • 嵌入式
  • 表演。重要的是现有记录的更新性能。更新速度可能为每秒10万次(但更可能为每秒20-50万次)。至于插入/删除,它们当然会发生,但可能每天只发生几次。因此,我不太担心插入/删除性能
  • 复制。对于恢复能力,我需要复制地图的磁盘副本。从主机到从机的复制不需要是原始事务的一部分,也就是说,我可以牺牲一些酸性来提高性能
  • 记录的数量预计为100k-200k,但不会更高。每个记录的大小可能是100-200KB,所以实际上总共没有那么多数据。我猜测数据文件的总大小将低于100MB,这可能是一个偏高的估计
  • 数据总量不超过内存中始终可以容纳的数据量。(这就是为什么我可以保证不会有磁盘读取,除非在启动期间)
  • 我的应用程序不是分布式的。在任何给定的时间点上,只有一个活动进程写入磁盘
  • 开放源码许可证。(Apache、BSD、LGPL应该可以)
  • 所讨论的应用程序永远不需要存储除上述数据结构之外的任何内容,即,它将来不会对其他持久性数据结构有任何需求。因此,基于这种特殊的数据结构进行优化听起来是公平的

    我看过Berkeley DB Java edition,但它在需求6上失败了。我已经看过TokyoCabinet/KoyotoCabinet,但它没有达到要求1


    那你有什么建议

    有几种选择,但似乎符合您的需求。还有一些选择,但可能比你需要的更多。

    你看过吗?它是一个内存中的“数据库”(键值存储),可以满足您的所有需求。

    看看HazelCast。它满足您的大多数要求,只是它是分布式的。

    我认为它非常适合您的情况

    • 纯Java、可嵌入键值存储
    • 在内存中,可选地持久化到磁盘
    • 具有无阻塞、最终一致的复制,针对高更新率进行了优化
    • LPGLv3许可证

    我使用。Ehcache磁盘缓存的复制不需要企业版吗?(因此它违反了要求#9)。还是我误解了?你很可能是对的。我错过了那个要求。你看过Hazelcast吗?谢谢。我的遗憾是,我从来没有听说过neo4j。如果我需要复制,我不需要企业许可证吗?(因此违反了我的要求#9)。警告:我只是简单地看了一下他们的网站。Redis是如何使用上面的req#1或req#3播放的?我很抱歉-我以为你在要求Java解决方案。。。错过了纯Java的。Redis有一个Java库,但我想这不是你想要的。