我需要一个磁盘支持的Map结构才能在Java应用程序中使用.它必须具有以下标准:
记录键将是字符串或长整数.如上所述,读取将比写入更频繁,并且大多数读取将仅仅是检查密钥是否存在(即,不需要读取密钥相关数据).每条记录仅更新一次,记录不会被删除.
我目前使用Bdb JE但我正在寻找其他选择.
更新
从那以后,通过减少对二级密钥的依赖性,提高了现有BDB设置的查询性能.有些查询需要在两个辅助密钥上进行连接,并将它们组合成一个复合密钥,我在查找中删除了一个间接级别,这样可以很好地加快速度.
我正在设计一个基于Java的网络应用程序,我需要一个键值存储.Berkeley DB似乎适合我,但似乎有两个Berkeley DB可供选择:用C语言实现的Berkeley DB Core和用纯Java实现的Berkeley DB Java Edition.
问题是,如何选择使用哪一个?随着网络应用程序的可扩展性和性能非常重要(谁知道,也许我的想法将成为下一个Youtube),我无法轻易找到两者之间的任何有意义的基准.我还没有熟悉Cores Java API,但我发现很难相信它可能比Java版本更糟糕,Java版本看起来相当不错.
如果其他一些键值存储更好,也可以随意推荐.我正在存储小的二进制blob,键可能是数据的哈希值,或者其他一些唯一的id.
我想在Android设备上使用快速键值存储,其值为图像位图.应该通过磁盘备份存储并提供一些缓存,从而最大限度地减少磁盘IO.需要多线程访问,但不是必需的.
我看过看起来符合要求的Java Berkeley DB.还有其他图书馆表现更好吗?或者Berkeley DB在Android平台上表现如何?
我可以使用一个解决方案,它需要一个键值对驻留在内存中,但存储完整的键值对集可能会超出设备内存的大小.
在Maven Central(或其他一些回购公司)Berkeley DB JE 5.0.x的坐标是什么?
我需要将超过10亿个密钥加载到Berkley DB中,因此我想提前调整它以获得更好的性能.使用标准配置,我现在花了大约15分钟加载1'000'000键,这太慢了.是否有适当的方法来调整例如Berkley DB的B + Tree(节点大小等...)?
(作为比较,在调整tokyo cabinet之后,它在25分钟内加载10亿个键).
PS我正在寻找调优技巧作为代码而不是为运行系统设置的参数(如jvm size等...)
我一直在寻找将BDB的Java Edition 4.1.7的数据库类型从BTree更改为Hash.Core版本有DatabaseType.HASH,DatabaseType.RECNO和DatabaseType.Queue- Java Edition中不支持这些.如果是这样有理由放弃这些?