我面临的问题是BSON附带了ObjectId和Timestamp,这在Messagepack中是不支持的,而且不可能为Messagepack定义一个自定义的序列化程序(至少据我所知)。
我写了一段python代码来比较pymongo的BSON和msgpack。只需很少的优化,我就可以实现300%的性能提升。那么,有没有办法把BSON转换成Messagepack呢?
发布于 2012-10-28 21:59:50
下面是我是如何解决这个问题的。
不幸的是,由于mongodb非REST API没有为文档检索提供严格的或JS模式(与其REST API相反,在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多了一步,Messagepack序列化程序也比BSON编码快,虽然不是3倍。对于10000次重复,差异是十分之三秒。
https://stackoverflow.com/questions/13080374
复制相似问题