键值商店建议

Kev*_*vin 12 java nosql

我需要一个非常基本的java键值存储.我从一个HashMap开始,但似乎HashMap在某种程度上是空间效率低下的(我存储了大约2000万条记录,而且似乎需要大约6GB的RAM).

地图是Map<Integer,String>,所以我正在考虑使用GNU Trove TIntObjectHashMap<byte[]>,并将地图值存储为ascii字节数组而不是String.

作为替代方案,是否有一个键值存储只需要添加jar文件,不会立即将整个映射保存在RAM中,并且仍然相当快?

mxr*_*xro 8

BabuDB

BabuDB是一个嵌入式非关系数据库系统.其精简和简单的设计使其能够持久存储大量的键值对,而无需像BerkeleyDB这样的类似方法的开销和复杂性.

许可证:新BSD许可证,语言:Java

JDBM2

JDBM2提供由磁盘存储支持的HashMap和TreeMap.

许可证:Apache License 2.0,语言:Java

香蕉DB

Banana DB是一个用Java实现的独立键/值对数据库.

许可证:Apache License 2.0,语言:Java


我尝试过BabuDB和JDBM2,它们工作正常.BabuDB设置起来有点困难,但可能比JDBM2提供更高的性能.

这些所有的所有数据库,它允许对坚持在磁盘上的数据.还有解决方案可以在内存中保存大型地图(ehcache,hazelcast,...).


gha*_*yes 5

使用Berkeley DB.

Berkeley DB 直接在磁盘上的btree中存储对象图,集合中的对象或简单的二进制键/值数据.这种简单,高效的方法消除了ORM解决方案中所有不必要的开销.使用直接持久层(DPL)Java开发人员使用存储信息注释类,就像JPA一样.这种方法熟悉,高效且快速.DPL降低了数据存储的复杂性,同时又不牺牲速度.

这绝对可以为您带来内存和速度的巨大提升,同时不会增加应用程序的复杂性.请享用!

  • tl; dr:如果您的项目是开源的,或者2)供内部使用(非重新分配),您可以免费使用它.否则,您需要从Oracle获得许可证(并且它们不会指示潜在的成本). (2认同)