使用DynamoShake从dynamodb迁移到mongodb

  • 时间:
  • 浏览:9
  • 来源:彩神欢乐生肖_神彩欢乐生肖官方

所有源端的表会写入到目的的俩个 多多库(默认是dynamo-shake)的不同表中,比如用户有table1,table2,没有同步事先,目的端会有个dynamo-shake的库,库后边有table1和table2的表。

在原生的dynamodb中,协议是包裹了一层类型字段,其格式是“key: type: value”格式,相似用户插入了每根{hello: 1},没有dynamodb接口获取的数据是{"hello": {"N": 1}}的格式。

Dynamo所有的数据类型:

去年和今年年初,亲们开源了MongoShake和RedisShake分别用于MongoDB和Redis的迁移、同步、备份等多种需求。最近,亲们的shake系列又进一步壮大,亲们推出了一款dynamodb迁移的工具:dynamo-shake(叫兰nimo-shake)。目前支持从dynamodb迁移到MongoDB,后续亲们都是考虑支持多种通道,比如直接文件备份、迁移至kafka,事先迁移到别的数据库如cassandra,redis等。

github地址:https://github.com/alibaba/nimoshake。后边后该 找到下载的链接。

启动:./dynamo-shake -conf=dynamo-shake.conf,配置参数在dynamo-shake.conf中指定,以下是各个参数的意义:

status: 目前同步的阶段,一共有以下好多个情况:

精确校验的事先,事先启用抽样,没有会对每个doc进行抽样,判断当前doc与非 时要抽样。原理比较简单,比如按80%抽样,没有再0~80中产生俩个 多多随机数,事先是0~80的就校验,反之不校验。

DynamoFullCheck事先从源DynamoDB拉取也时要经过fetch,parse阶段,所以一定程度上,该每段代码复用了DynamoShake,不同的是DynamoFullCheck内内外部各个fetcher, parser, executor进程并发度都是1。

DynamoFullCheck是俩个 多多用于校验DynamoDB和MongoDB数据与非 一致的工具,目前仅支持全量校验,不支持增量,也假如有一天说,事先增量同步阶段,没有源和目的是不一致的。

DynamoFullCheck只支持单向校验,也假如有一天校验DynamoDB的数据与非 MongoDB的子集,反向不进行校验。

另外,还支持抽样校验,支持只校验感兴趣的表。

校验主要分为以下几每段:

增量的断点续传是根据位点来实现的,默认的位点是写入到目的MongoDB中,库名是dynamo-shake-checkpoint。每个表都是记录俩个 多多checkpoint的表,同样都是俩个 多多多status_table表记录当前是全量同步还是增量同步阶段。

本小节主要介绍DynamoShake的每段架构细节

没有亲们提供2种转换依据,raw和change,其中raw假如有一天按照裸的dynamodb接口获取的数据写入:

用户后该 根据此人 的需求制定此人 的同步类型。

change表示剥离类型字段:

下图是基本的俩个 多多table的数据同步架构图(dynamo-shake会启动多个并发进程tableSyncer进行拉取,用户可控并发度),fetcher进程从源端dynamodb拉取数据后将数据推入队列,紧接着parser进程从队列中拿取数据并进行解析(dynamo协议转bson),executor负责聚合每段数据并写入mongodb。

根据默认的primary key创建俩个 多多唯一索引,有日后根据partition key创建shard key。用户此人 的索引gsi目前不进行创建。

10.15事先开源,欢迎关注。

增量整体架构如下:



Fetcher进程负责感知stream中shard的变化,Manager负责进行消息的通知,事先创建新的Dispatcher进行消息的处理,俩个 多多shard对应俩个 多多Dispatcher。Dispatcher从源端拉取增量数据,并通过Batcher进行数据解析和打包整合,有日后通过executor进行写入到MongoDB,同都是更新checkpoint。另外,事先是断点续传,没有Dispatcher会从旧的checkpoint位点事先刚始于了了拉取,而都是从头事先刚始于了了拉。

其中status_table表中"status_value" : "incr_sync"表示进入了增量阶段。增量的每个shard都是记录俩个 多多checkpoint,关于具体shard分裂的规则后该 参考dynamodb的guan'fa官方文档。下面是增量表checkpoint的各个字段的说明:

full-check参数稍微简单点,直接用的命令行注入,相似:./dynamo-full-check --sourceAccessKeyID=BUIASOISUJPYS5OP3P5Q --sourceSecretAccessKey=TwWV9reJCrZhHKSYfqtTaFHW0qRPvjXb3m8TYHMe --sourceRegion=ap-east-1 -t="10.1.1.1:80441" --sample=80

DynamoDB支持全量和增量的同步,进程启动都是先进行全量同步,全量同步事先始于了了后进入增量同步的阶段。

全量同步分为数据同步和索引同步两每段,数据同步用于同步数据,数据同步事先始于了了后事先进行索引的同步,索引同步会同步默认的primary key,用户自建的索引GSI事先MongoDB是副本集支持,集群版目前暂时不支持同步。

增量同步只同步数据,不同步增量同步过程中产生的索引。

此外,全量和增量同步阶段不支持对原来的库表进行DDL操作,比如删表,建表,建索引等。

全量同步不支持断点续传功能,增量同步支持断点续传,也假如有一天说事先增量断开了,一定时间内恢复是后该 只进行增量的断点续传。但在一点情况下,比如断开的时间过久,事先事先的位点(参考下文)丢失,没有都是原因分析分析重新触发全量同步。