9.5.2 数据旁路导入

虽然OceanBase内部实现了大量优化技术,但是UpdateServer单点写入对于某些OLAP应用仍然可能成为问题。这些应用往往需要定期(例如每天,每个月)导入大批数据,对导入性能要求很高。为此,OceanBase专门开发了旁路导入功能,本节介绍直接将数据导入到ChunkServer中的方法(即ChunkServer旁路导入)。

OceanBase的数据按照全局有序排列,因此,旁路导入的第一步就是使用Hadoop MapReduce这样的工具将所有的数据排好序,并且划分为一个个有序的范围,每个范围对应一个SSTable文件。接着,再将SSTable文件并行拷贝到集群中所有的ChunkServer中。最后,通知RootServer要求每个ChunkServer并行加载这些SSTable文件。每个SSTable文件对应ChunkServer的一个子表,ChunkServer加载完本地的SSTable文件后会向RootServer汇报,RootServer接着将汇报的子表信息更新到RootTable中。

例9-7 有4台ChunkServer:A、B、C和D。所有的数据排好序后划分为6个范围:r1(0~100]、r2(100~200]、r3(200~300]、r4(300~400]、r5(400~500]、r6(500~600],对应的SSTable文件分别记为sst1,sst2,……,sst6。假设每个子表存储两个副本,那么,拷贝完SSTable文件后,可能的分布情况为:


A:sst1,sst3,sst4

B:sst2,sst3,sst5

C:sst1,sst4,sst6

D:sst2,sst5,sst6


接着,每个ChunkServer分别加载本地的SSTable文件,完成后向RootServer汇报。RootServer最终会将这些信息记录到RootTable中,如下:


r1(0~100]:A、C

r2(100~200]:B、D

r3(200~300]:A、B

r4(300~400]:A、C

r5(400~500]:B、D

r6(500~600]:C、D


如果导入的过程中ChunkServer发生故障,例如拷贝sst1到机器C失败,那么,旁路导入模块会自动选择另外一台机器拷贝数据。

当然,实现旁路导入功能时还需要考虑很多问题。例如,如何支持将数据导入到多个数据中心的主备OceanBase集群,这里不会涉及这些细节。