私が直面している問題は、BSONにはMessagepackでサポートされていないObjectIdとTimestampが付属しており、Messagepackのカスタムシリアライザーを定義できないことです(少なくとも私が知る限り)。
pymongoのBSONとmsgpackを比較するためのPythonコードを作成しました。あまり最適化することなく、300%のパフォーマンス向上を達成できました。では、BSONをMessagepackに変換する方法はありますか?
1 に答える
1
これが私が問題を解決した方法です。
残念ながら、mongodb none-REST APIにはドキュメント検索用のStrictまたはJSモードが付属していないため(ドキュメントの取得に使用する形式を指定できるREST APIとは対照的に)、オプションがありません。ただし、手動で変換を行うため。
import json
from bson import json_util
import msgpack
con = Connection()
db = con.test
col = db.collection
d = col.find().limit(1)[0]
s = json.dumps(d, default=json_util.default) # s is in JSON compatibale format (ObjcetId => '$0id'
packer= msgpack.Packer()
packer.pack(s) # messagepack can successfully convert since the format is JSON compatible.
すばらしい観察結果は、json.dumpsを1ステップ追加しても、MessagepackシリアライザーはBSONエンコードよりも高速であり、3倍ではないということです。10000回の繰り返しの場合、差は10分の3秒です。
于 2012-10-28T13:59:50.300 に答える