PYTHON序列化性能

编辑:光环大数据 来源: 互联网 时间: 2017-10-31 14:26 阅读:

  PYTHON序列化性能,当项目到达适度规模,他们就必须以很多形式展现对象.比如以一个从API终端,缓存,或者数据库的json结果,或者以一个RPC的thrift对象,或者以一个内存对象的形式.

在Uber,我们已经开始用schematics库为我们的内存展现.他为对象提供了权威的形式,可以被序列化为thrift,sql,或者各式的json形式.这种源生的序列化工作为基础事件起了极大作用.

太多的表现形式

然而,你很快进入不同对象上有不同属性引用的领域的状态.拿我们Document实体来说,他已经在thrift中createdAt过,但却在存储中created_at.再比如,在thrift是一个特定的整形但在mysql中是DateTime格式.在我们的legacyAPI是s3url但在新数据库是url.

说说映射类.映射定义了一种相同数据在不同展示直接转换的方法.如果不注意,通过写几乎完全一样的属性名的规则,会迅速激增代码的复杂性.

另外,因为(反)序列化操作很常见,就需要非常迅速.这里有些我们经常用来加速的选项的技巧.

1.预计算属性集合

在我们早期版本的映射中计算属性名之间的映射,比如上面提到的Document这样随时变化.这样又慢又重复很多遍.我们在类的定义中构建一个metaclass创建一个这些属性集合的列表(比如从created_at到createdAt).那么(反)序列化通过属性匹配列表的方式就简化了迭代.

classMeta(type):

def__new__(mcs,name,bases,dct):

entity_cls=dct['entity_cls']

#precomputethemap

record_mapper={}

forfieldinentity_cls.fields():

record_mapper[field]=...

dct['record_mapper']=record_mapper

returnsuper(Meta,mcs).__new__(mcs,name,bases,dct)

classMapper(object):

__metaclass__=Meta

entity_cls=MyEntity

@classmethod

defrecord_to_entity(cls,record):

entity_data={}

forentity_field,record_fieldinrecord_mapper.iteritems():

entity_data[entity_field]=...

cls.entity_cls(raw_data=entity_data)

2.数据快速转义

Dateutil是标准的iso8601转义-它支持很多变形(毫秒,时区,完整iso8601前缀).问题是,这样会慢的可以.

DocumentMapper.record_to_entity(record)

10000loops,bestof5:513.436079usecperloop#REALLYslow

用ciso8601的C库替代,很大程度上提高了性能.

DocumentMapper.record_to_entity(record)

10000loops,bestof5:62.783957usecperloop#8.2xfaster

3.禁用图表验证

Schematic会自动帮助在__init__上做验证.然而我们知道数据是合法的因为他来自映射.可是schematics没有选项来跳过这个验证.这里有个很酷的python技巧在忽略__init__函数时创建对象.

instance=MyClass.__new__(MyClass)

这样将会创建一个MyClass的事例而不用执行__init__.

移除图表构造器并分配属性直接地造成另一个提升.

DocumentMapper.record_to_entity(record)

10000loops,bestof5:9.325492usecperloop#55xfasterthanoriginal

dict(**record)#givessenseofbaseline

10000loops,bestof5:0.469947usecperloop

dict(**record)在这里并不是一个切实可行的操作,因为没有自定义类,数据验证或者是属性验证.我们离基础线少了20倍,这是很大的.但是我很高兴在绝对值里,我们低于了10us.

我们还没完全公开代码目前.如果你用schematics或者想检出库,请联系我.另外一方面,我希望你觉得这些操作能在你的工作中起作用.

 

  Python培训Python培训班Python培训机构,就选光环大数据!

  还不够过瘾?想学习更多?点击 http://hadoop.aura.cn/python/ 进行Python学习!


大数据培训、人工智能培训、Python培训、大数据培训机构、大数据培训班、数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请专业的大数据领域知名讲师,确保教学的整体质量与教学水准。讲师团及时掌握时代潮流技术,将前沿技能融入教学中,确保学生所学知识顺应时代所需。通过深入浅出、通俗易懂的教学方式,指导学生更快的掌握技能知识,成就上万个高薪就业学子。 更多问题咨询,欢迎点击------>>>>在线客服

你可能也喜欢这些

在线客服咨询

领取资料

X
立即免费领取

请准确填写您的信息

点击领取
#第三方统计代码(模版变量) '); })();
'); })();