java - 基于磁盘的嵌入式键值存储

标签 java data-structures key-value-store

我们正在开发一个项目,该项目将使用单个 jar 文件进行分发。我们需要一些具有以下属性的键值存储:

  1. 可嵌入到我们的 jar 文件中,因此无需额外安装。
  2. 可容纳多达数千万对
  3. 内存效率高。这意味着 50M 对不到 100M
  4. 键和值都是简单类型:long、int、small byte[]
  5. 商业用途的免费许可是一个额外的好处
  6. 我们不需要并发、ACID 或此类高级的东西。
  7. 摊销查找时间低于 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/

相关文章:

c++ - 是否有针对搜索优化的类似集合的数据结构,提前知道会有很高的匹配率?

algorithm - 二维空间对象的高效数据结构

algorithm - 将 Zigzag 顺序的二叉树转换为双向链表

python - 哪个键值存储有不错的扭曲 API(非阻塞)?

java - 通过 Spring Batch 部分读取和写入数据 - OutOfMemoryError : GC overhead limit exceeded

java - 如何在 Controller/JSP 页面中使用 BackOffice 中的图像

java - 从在 Tomcat 中运行的 Web 应用程序写入 Socket 时出现 NullPointerException

mysql - Redis : Is it possible to get filtered data by any field stored in Redis?

big-o - LSM 树查找时间

java - 无法访问 Firestore 节点中的文档 key