GAE/JRubyにおけるJSONのベンチマーク

 こんにちは。那由多屋の加藤です。

 GAE/JRubyを用いていくつかのアプリケーションを動かしているのですが、どうもデータストアからの読み込みが遅くて困ります。

 そこで、読み込みしか行わない一部のデータを、JSON形式でファイルとして保持することにました。実用的な速度で動作するかどうか不安だったので、パフォーマンスを測定してみました。

測定条件

  • 1つの大きなハッシュテーブル(要素数はn)をロードしてデシリアライズ
  • キーは文字列、値は浮動小数点数(乱数)が10個含まれる配列
  • yamljson_pure、json-jrubyのそれぞれで測定
  • 開発環境(ローカル)と、本番環境(Google App Engine)で測定
  • 開発環境は、Core i7 920、メモリ6GB
  • ファイルの読み込みを含む、実時間を測定(CPU時間ではない)
  • 3回測定してその平均値を算出
  • gemパッケージのバージョン

n = 1,000

 ファイルサイズは約197KB。

開発環境 本番環境
yaml 0.036 秒 0.234 秒

n = 10,000

 ファイルサイズは約1.93MB。

開発環境 本番環境
yaml 0.374 秒 1.338 秒
json_pure 1.108 秒 2.508 秒
json-jruby 0.291 秒 0.411 秒

n = 40,000

 ファイルサイズは約7.77MB。

開発環境 本番環境
yaml 1.614 秒 5.497 秒
json_pure 0.561 秒 1.690 秒
json-jruby 0.624 秒 1.422 秒

まとめ

 json_pureの結果が不可解なのが気になりますが、GAE/JRubyではjson-jrubyを使うのが良さそうです。