FileStoredMapはJava Heapを使わない代わりに動作が重いので、Berkeley DB Java Edition(以下BDB)と速度比較を数週間前に行いました。その際、BDBのreadがあまりにも重く、比較自体が意味を成さないと考え、改めて計測しなおしてみました。
今回計測するにあたり、以下のページのライブラリを使ってベンチマーク用のモジュールを作成しました。
Java benchmarking article: http://www.ellipticgroup.com/html/benchmarkingArticle.html
このライブラリは、ウォームアップや、JITコンパイルの具合が変わった際に自動的に計測をしなおす等の機能が含まれています。
結果は以下のページに載せています。
masayuki038.github.com/masayuki038/FileStoredMap
やはりBDBのreadの値が大分変わりました。ざっと10倍程違います。
FileStoredMapのreadと比較しても大体10倍くらいの開きがあります。まだプロファイリングしてませんが、以下の理由で遅いのではないかと考えています。
- readした際にデータを必ずdiskから取得している
- BSONフォーマットのバイナリからデシリアライズしている
writeしたオブジェクトをメモリ上にLRUで一定サイズ保持しておけば速くはなると思いますが、極力メモリを使わないことを特徴としていることもあって、そういった実装を行う予定はありません。ただ、どの部分が重いかどうかは確認したいと思います。