我们正在开发一个项目,该项目将使用单个 jar 文件进行分发。我们需要一些具有以下属性的键值存储:
- 可嵌入到我们的 jar 文件中,因此无需额外安装。
- 可容纳多达数千万对
- 内存效率高。这意味着 50M 对不到 100M
- 键和值都是简单类型:long、int、small byte[]
- 商业用途的免费许可是一个额外的好处
- 我们不需要并发、ACID 或此类高级的东西。
- 摊销查找时间低于 100 微秒。
除了 BerkelyDB 或 JDBM2/3 之外还有什么建议吗?
最佳答案
GNU Trove提供了许多比标准 Java 映射更节省内存的映射(例如 TIntIntHashMap ),因为它们使用原始类型。我怀疑除非您了解所存储的内容,否则您能否获得比这更高的内存效率。宝库是 more or less LGPL,因此您可以安全使用。我不知道它是否特别符合您的具体规范,但我认为当您可以将东西放入 RAM 时值得尝试。
当您可能需要交换到磁盘时,Ehcache是一个不错的选择。您可以指定在达到一定数量的条目后,它将在磁盘上存储值(2.5 版中新增,如果您不知道确切的条目数,您可以在使用一定数量的 RAM 后指定)。
关于java - 基于磁盘的嵌入式键值存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8759713/