PyYAML vs JSON

PyYAMLとJSONの速度を,比較的でかいデータ (32.9 MB @ YAML, 33.9 MB @ JSON)で比べてみた.
JSONYAMLのサブセットなので,まぁ予想はしていたんだけど,驚くほど違ったのでメモ.

YAMLのほうは,PyYAMLをlibyamlとともにビルドしたもの (つまりCで書いてある).
JSONPython-2.6にビルトインのもの.しっかり読んでないので怪しいけどPythonネイティブのように見える.

In[11]: %time d = yaml.load(open('test.yaml'), Loader=yaml.cyaml.CLoader)
CPU times: user 193.71 s, sys: 20.37 s, total: 214.08 s
Wall time: 1087.30 s

In [12]: %time d = json.load(open('test.hmm.json'))
CPU times: user 34.60 s, sys: 0.23 s, total: 34.83 s
Wall time: 35.70 s

一応,他のプロセスは可能な限り殺してテストしたのに,CPU時間と実時間の比がおかしいことになってる.

YAMLにとって有利なCPU時間のほうで比べても,JSONのほうが6倍以上速い.
やはりYAMLのほうが表記の自由度高いし複雑な構造を表現できるから重いと.
しかし,JSONでも気を配ってインデントしてやれば,可読性の面ではカバーできそうな気がするし,
僕の用途ではYAMLである必要がなさそうなので,これからはjson-pyを使うことにしようと思った.

おしまい