董的博客中thrift相关基础的介绍:http://dongxicheng.org/search-engine/thrift-rpc/html
thrift碰到大list时瓶颈的缘由:数据结构
由于thrift协议中server和client的交互使用的是序列化的数据。当你使用thrift --gen cpp **.thrift 产生一个符合你使用场景的数据结构时,该数据结构都会对应了thrift中的相应的序列化的结构来序列化它。对于list类型数据结构的序列化thrift分三部:函数
体如今write_virt函数的调用上,第一次写入1,第二次写入2,第三次8。若是你的list数据长度为一千多万,那么每一个都对应了一个write_virt,每一个write_virt都有响应的memcpy操做,这个是很耗时的。ui
解决方案:server
把list这种结构的数据进行序列化,使用thrift传输binary类型的数据,这样即可以解决thrift序列化list慢的问题。由于thrift对binary类型的数据序列化使用的是整块拷贝,不像list是分块拷贝。htm
其中将list序列化的部分我使用的是boost的序列化方式。blog
有关数据序列化的问题我使用的是boost的序列化方式rpc
boost序列化使用方面比较不错的文章:博客
IBM讲解序列化的方法:http://www.ibm.com/developerworks/cn/aix/library/au-boostserialization/it
一个使用二进制序列化的实例:http://www.cppblog.com/liquidx/archive/2009/06/18/88007.html
转载请注明做者:xidianwlc