BSON到Messagepack

时间:2012-10-26 03:35:11

标签: bson msgpack messagepack

我面临的问题是BSON带有ObjectId和Timestamp,它们在Messagepack中不受支持,并且它不能为Messagepack定义自定义序列化器(至少据我所知)。
我写了一段python代码来比较pymongo的BSON和msgpack。由于优化程度不高,我可以实现300%的性能提升。 那么,有没有办法将BSON转换为Messagepack?

1 个答案:

答案 0 :(得分:1)

以下是我解决问题的方法。
不幸的是,因为mongodb none-REST API没有用于文档检索的严格或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.dump步骤,Messagepack序列化器也比BSON编码快,但不是3倍。对于10000次重复,差异是十分之三秒。