淘宝DataX 数据交换机制学习总结
来源:互联网 发布:乌克兰的军事实力 知乎 编辑:程序博客网 时间:2024/06/18 17:47
DataX是淘宝的数据同步工具,工作流程大概就是用Reader模块从源数据库读数据,在Storage模块里将Reader模块读到的数据交换给Write模块,Write模块将数据写进目的数据库。
整套工具是JAVA开发的。C++出身的对JAVA语法细节不熟悉,结合网络资料和项目源码注释,梳理一下Storage模块的逻辑流程。
DoubleQueue:
设立两块空间,一个存储源数据,一个存储目标数据。在开始,空间A和空间B都是空的,loading 任务从源数据库向A空间加载数据,A空间满后再向B空间加载数据,同时dumping任务将A空间数据转储到目的数据库。A空间清空后,交换AB两者的任务,即A空间的任务换成loading,B空间的任务换成dumping。不断重复上述操作。
RAMStorage:
基于DoubleQueue,用内存作为数据交换的空间
基于RAMStorage的数据操纵接口:LineSender和LineReceiver
LineSender的作用:Reader用LineSender来放数据到Storage对象中。
在LineSender接口里,主要有这几个接口:
createLine():构造一个将要被用来交换数据的Line对象
sendToWriter(Line line): 用来将一个Line对象put到Storage抽象类里。
flush()用来将buffer的数据flush到Storage对象中。
LineReceiver的作用:Writer用LineReceiver来从到Storage对象中获取数据。
在LineReceiver接口里,主要有一个接口:
getFromReader():获取下一个Storage中的Line对象。
基于RAMStorage的批量数据交换:BufferedLineExchanger
内部初始化一个指定大小的数组缓冲,默认大小64
在push数据时会先写满64个数组再单次写入DoubleQueue队列,Poll时返回的大小可能会小于64个单位,由当时数组的实际大小决定。
其它:
数据读写用到了多线程并发。看JAVA源码比较吃力,猜测Reader/Writer线程和DoubleQueue之间应该类似于C++多线程编程中的生产者-消费者模型。
- 淘宝DataX 数据交换机制学习总结
- 数据交换工具DataX使用
- 淘宝的数据解决方案:datax - DataX产品说明
- 淘宝的数据解决方案:datax - DataX产品说明
- 数据集成学习笔记 --- DataX学习笔记
- 异构数据源海量数据交换工具-sqoop & DataX
- hdata datax交流总结
- hdata datax交流总结
- Datax 数据抽取同步
- 异构数据源海量数据交换工具-Taobao DataX 下载和使用
- DataX 在异构的数据库/文件系统之间高速交换数据的工具
- 异构数据源海量数据交换工具-Taobao DataX 下载和使用
- Datax源码学习
- DataX---数据同步json操作
- 交换数据方法总结
- 学习python(6)数据交换的几点方法总结
- hadoop集群间迁移数据DataX
- 阿里开源数据同步工具--DataX
- Map 和 Reduce函数
- libpng Simplified API 解説
- fragment中的空指针问题
- WebX实践指南_持久化(三)
- Move Zeroes
- 淘宝DataX 数据交换机制学习总结
- Zookeeper shell操作
- 数据结构实验之图论四:迷宫探索 【基于邻接表的广度优先搜索】
- 【leetcode】【104】Maximum Depth of Binary Tree
- ubuntu apt-get使用小结
- 【Codeforces Testing Round 12B】【贪心】Restaurant 选取数量最多的不覆盖区间数
- [3.2]行为扩展以及插件机制介绍!
- AngularJS探秘(一)——$apply浅析
- UIDatePicker(日期时刻选择框)