微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java持久键值存储

我知道这可能已被问过无数次,但我似乎无法找到我的确切用例的黄金解决方案.

我只有一个数据结构,一个地图,其中键是一个字符串.地图的对象是地图本身,但这次的值是简单的对象/基元,如string,int,double等.所以地图的地图.最里面的地图的键是恒定的,即除了创建之外,没有从最里面的地图添加/删除条目.所以它有点像传统的表,尽管每行可能有任意列.

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

这是我的要求:

>纯Java解决方
>磁盘映射仅在重新启动时使用.因此,从来没有任何从磁盘读取,所有的写入只能由一个应用程序完成)
>嵌入式.
>表现.现有记录的UPDATE性能很重要.更新可能每秒发生100k次(但更可能是每秒20-50k).至于INSERT / DELETE,它们当然会发生,但可能每天只发生几次.因此,我不太担心INSERT / DELETE性能.
>复制.为了恢复,我需要复制地图的磁盘副本.从主服务器到从服务器的复制不需要是原始事务的一部分,即我可以牺牲一些ACIDness来提高性能.
>记录数量预计为10万至20万,但不会高很多.每条记录的大小可能是100-200 KB,因此总的来说并不是那么多数据.我猜测数据文件的总大小将低于100 MB,这可能是偏高的估计值.
>数据总量不超过内存总能容纳的数据量. (这就是为什么我可以保证没有磁盘读取,除了启动时)
>我的申请没有分发.在任何给定的时间点,只有一个活动进程写入磁盘.
>自由开源许可证. (Apache,BSD,LGPL,应该没问题)

有问题的应用程序永远不需要存储除上述数据结构之外的任何内容,即它将不具有对其他持久数据结构的未来发现的需求.因此,基于这种特定的数据结构进行优化是合理的.

我查看了Berkeley DB Java版本,但它未能满足要求#6.我看过TokyoCabinet / KoyotoCabinet,但它没有达到要求#1.

那么你会推荐什么?

解决方法:

有几个选项,但neo4j似乎符合你的要求. HBaseCassandra也是选项,但比您可能需要的更多.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐