thrift中使用list数据类型传输大数据瓶颈及解决方案

感情迁移 提交于 2019-12-01 12:36:39

董的博客中thrift相关基础的介绍:http://dongxicheng.org/search-engine/thrift-rpc/

thrift碰到大list时瓶颈的原因:

        因为thrift协议中server和client的交互使用的是序列化的数据。当你使用thrift --gen cpp  **.thrift 产生一个符合你使用场景的数据结构时,该数据结构都会对应了thrift中的相应的序列化的结构来序列化它。对于list类型数据结构的序列化thrift分三部:

        体现在write_virt函数的调用上,第一次写入1,第二次写入2,第三次8。如果你的list数据长度为一千多万,那么每个都对应了一个write_virt,每个write_virt都有响应的memcpy操作,这个是很耗时的。

解决方案:

        把list这种结构的数据进行序列化,使用thrift传输binary类型的数据,这样便可以解决thrift序列化list慢的问题。因为thrift对binary类型的数据序列化使用的是整块拷贝,不像list是分块拷贝。

其中将list序列化的部分我使用的是boost的序列化方式。

有关数据序列化的问题我使用的是boost的序列化方式

boost序列化使用方面比较不错的文章:

IBM讲解序列化的方法:http://www.ibm.com/developerworks/cn/aix/library/au-boostserialization/

一个使用二进制序列化的实例:http://www.cppblog.com/liquidx/archive/2009/06/18/88007.html

转载请注明作者:xidianwlc 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!