文档章节

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

liujiest
 liujiest
发布于 2016/09/01 20:45
字数 388
阅读 330
收藏 1

董的博客中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 

本文转载自:http://blog.csdn.net/xidianwlc/article/details/8984420

共有 人打赏支持
liujiest
粉丝 8
博文 75
码字总数 34353
作品 0
杭州
程序员
私信 提问
Apache Thrift介绍

Thrift是为了解决facebook系统中各系统之间大数据量的传输通讯以及系统之间语言环境不同需要跨平台这一特性而创造的。所以thrift可以支持多种程序语言,例如: C++, C#, Cocoa, Erlang, Haske...

吕坤
2013/02/19
0
0
跨语言服务部署框架Thrift简介[转]

参考文档: http://dongxicheng.org/search-engine/thrift-framework-intro/ Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间...

强子哥哥
2016/06/25
359
0
架构设计:系统间通信(33)——其他消息中间件及场景应用(下3)

=================================== (接上文:《架构设计:系统间通信(32)——其他消息中间件及场景应用(下2)》) 5-7、解决方案三:非侵入式方案 以上两种方案中为了让业务系统能够集...

yinwenjie
2016/05/31
0
0
Thrift学习笔记—IDL基本类型

原文地址:http://zhwen.org/xlog/?p=658 thrift 采用IDL(Interface Definition Language)来定义通用的服务接口,并通过生成不同的语言代理实现来达到跨语言、平台的功能。在thrift的IDL中...

helight
2014/01/22
0
0
facebook thrift框架讲解

简介 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈代码生成引擎,以构建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Coco...

tqyin
2016/09/29
4K
2

没有更多内容

加载失败,请刷新页面

加载更多

使用Maven打包Docker镜像-Jenkins版

前提:Jenkins服务器上安装好Docker,创建Jenkins任务,配置好代码来源,和Build配置: pom.xml中添加docker-maven-plugin: <plugin> <groupId>com.spotify</groupId> <artifactI......

莫在全
20分钟前
0
0
rabbitmq

灰暗
今天
1
0
Flink

flink HA部署 flink搭建,采用分布式部署方式,分别为A,B,C三个节点。其中A为master;A,B,C为worker。 本文使用的用户是hadoop用户(自己新建) 先决条件 Java 1.8.x or higher scala 自己使用...

-九天-
今天
2
0
数据中台和传统数仓的区别

中台系统把业务层同性的算法能力,服务能力,业务能力高度集成,有效组织 ,动态规划。更好的帮助上层业务。 今天就让我们看看关于数据中台的问答吧。 1 Q : 什么是数据中台? A : 数据中台是...

hblt-j
今天
5
0
Java在什么时候会出现内存泄漏

在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对...

群星纪元
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部