董的博客中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
来源:oschina
链接:https://my.oschina.net/u/2662344/blog/741213