尝试 sg-cdb(djb 的 cdb 的奇怪 gizmo 端口),然后将 RandomAccessFile 换成 BufferedRandomAccessFile(在 jai-imageio 代码中有一个很好的)。
我得到了令人兴奋的写入性能。通过屋顶(因为它全部缓冲然后一举提交)。但是,缓冲 RAF 的读取性能没有改变。
我可以花时间与 H2 批量导入进行比较,虽然不确定,但可能具有可比性。
数据库很简单:key => value。仅在键上支持查找。就我而言,密钥是(base32 编码的随机整数 + base32 编码的唯一整数),所以本地化应该不会有太大帮助。这些值是 120 个随机字节的数组。
加载(sql插入)
h2,具有 131MB 缓存(包括刷新,不启动):
2011 年 5 月 4 日晚上 11:45:10 测试。TestH2Simple main:插入执行添加时间:101625 毫秒
数据库大小:约 140 MB
批量大小:2000:插入执行添加时间:116875 毫秒
批量大小:10000:insertsperformed 添加时间:70234 ms
与 cdb 的 sg-cdb(奇怪的 gizmo)端口进行比较:
使用 RandomAccessFile:插入不刷新:21688 毫秒,刷新:30359 毫秒,总计:52047 毫秒磁盘上的文件大小:66.1 MB(69,315,632 字节)
使用 BufferedRandomAccessFile:大约 6.5 秒
当然,这并不是一个真正公平的比较,因为 H2 在插入期间不断刷新数据,而 sg-cdb 则不是。在进行比较时必须牢记这一点。比较 sg-cdb insert 和 H2 bulk insert 可能是公平的
读取(sql 选择)
sg-cdb
:搜索:490000 完成时间:1304544550439 耗时:17547 毫秒,计数器:0
H2
:选择在:19579 毫秒内执行
关于内存映射文件:它们似乎不是您要寻找的。MMap 文件的出色性能是当您将大约 100MB 或更多的内存映射到内存中时(我的经验)。