bson.son.SON和collections.OrderedDict有什么区别?

时间:2018-07-16 06:41:58

标签: python mongodb python-2.7 pymongo

bson.son.SON主要在pymongo中使用,以获取有序的映射(dict)。

但是python已经在collections.OrderedDict()

中添加了命令dict

我已经阅读了bson.son.SON的文档。它确实说SON与OrderedDict相似,但没有提及区别。

那有什么区别?什么时候应该使用SON?什么时候应该使用OrderedDict?

1 个答案:

答案 0 :(得分:0)

当前,两者之间的细微差别是bson.son.SON仍与Python 2.7和older versions向后兼容。 此外,SON的序列化速度比OrderedDict快的说法在2018年不再正确。

son模块是added in Jan 8, 2009

Mar 2, 2009中的python中添加了

collections.OrderedDict(PEP-372)。

虽然日期的差异不能确定首先发布的日期,但有趣的是,Mongodb已经为其用例实现了有序映射。我想他们可能决定继续维护它以实现向后兼容性,而不是将其代码库中的所有SON引用切换到collections.OrderedDict

在两者的小型实验中,您很容易发现collections.OrderedDict的性能要优于bson.son.SON

In [1]:    from bson.son import SON
           from collections import OrderedDict
           import copy

           print(set(dir(SON)) - set(dir(OrderedDict)))
  

{'弱引用”,“ iteritems”,“ iterkeys”,“ itervalues”,“ 模块”,“ has_key”,“ deepcopy >','to_dict'}

In [2]:    %timeit s = SON([('a',2)]); z = copy.deepcopy(s)
  

每个循环14.3 µs±758 ns(平均±标准偏差,共运行7次,每个循环100000次)

In [3]:    %timeit s = OrderedDict([('a',2)]); z = copy.deepcopy(s)
  

每个循环7.54 µs±209 ns(平均±标准偏差,共运行7次,每个循环100000次)

In [4]:    %timeit s = SON(data=[('a',2)]); z = json.dumps(s)
  

每个循环11.5 µs±350 ns(平均±标准偏差,共运行7次,每个循环100000次)

In [5]:    %timeit s = OrderedDict([('a',2)]); z = json.dumps(s)
  

每个循环5.35 µs±192 ns(平均±标准偏差,共运行7次,每个循环100000次)

在回答有关何时使用SON的问题时, 如果在低于2.7的Python版本中运行软件,请使用SON。

如果可以帮助您,请使用OrderedDict模块中的collections。 您还可以使用dict,它们现在在Python 3.7

中排序
相关问题