MongoDB Stream是怎样实现美满数据增量迁徙的?
副问题[/!--empirenews.page--]
技能沙龙 | 邀您于8月25日与国美/AWS/转转三位专家配合切磋小措施电商拭魅战
一、配景先容最近微处事架构火得不可,但本质上壹贝偾风口上的一个热门词汇。 作为笔者的履素来说,想要应用一个新的架构必要带来的厘革本钱长短常高的。 尽量云云,今朝照旧有很多企业踏上了处事化改革的阶梯,这个中则免不了“旧改”的各类繁杂事。 所谓的“旧改”,就是把现有的体系架构来一次重构,拆分成多个细粒度的处过后,然后找时刻进级割接一把,让新体系上线。这个中,数据的迁徙每每会成为一个很是重要且繁杂的活儿。 拆分处事时数据迁徙的挑衅在哪?
二、常见方案凭证迁徙的方案及流程,可将数据迁徙分为三类: 1、停机迁徙 最简朴的方案,停机迁徙的次序如下: 回收停机迁徙的甜头是流程操纵简朴,器材本钱低,然而弱点也很明明,迁徙进程中营业是无法会见的,因此只得当于规格小、应承停服的场景。 2、营业双写 营业双写是指对现有体系先举办改革进级,支持同时对新库和旧库举办写入。之后再通过数据迁徙器材对旧数据做全量迁徙,待全部数据迁徙转换完成后切换到新体系。 表示图: 营业双写的方案是滑腻的,对线上营业影响极小,在呈现题目的环境下可从头来过,操纵压力也会较量小。 笔者在早些年前实行过这样的方案,整个迁徙进程确实很是顺遂,但实现该方案较量伟大,必要对现有的代码举办改革并完成新数据的转换及写入,对付开拓职员的要求较高。在营业逻辑清楚、团队对体系有足够的把控手段的场景下合用。 3、增量迁徙 增量迁徙的根基思绪是先举办全量的迁徙转换,待完成后一连举办增量数据的处理赏罚,直到数据追平后切换体系。 表示图: 要害点: 要求体系支持增量数据的记录。对付MongoDB可以操作oplog实现这点,为停止全量迁徙进程中oplog被冲掉,在开始迁徙前就必需开始监听oplog,并将改观所有记录下来;假如没有步伐,必要从应用层上思量,好比为全部的表(荟萃)记录下updateTime这样的时刻戳,可能进级应用并支持将修改操纵单独记录下来。 增量数据的回放是一连的。在全部的增量数据回放转换进程中,体系如故会发生新的增量数据,这要求迁徙器材能做到将增量数据一连回放并将之追平,之后才气做体系切换。 MongoDB 3.6版本开始便提供了Change Stream成果,支持对数据改观记录做监听。这为实现数据同步及转换处理赏罚提供了更大的便利,下面将切磋怎样操作Change Stream实现数据的增量迁徙。 三、Change Stream先容 Chang Stream(改观记录流)是指collection(数据库荟萃)的改观变乱流,应用措施通过db.collection.watch()这样的呼吁可以得到被监听工具的及时改观。 在该特征呈现之前,你可以通过拉取oplog到达同样的目标;但oplog的处理赏罚及理会相对伟大且存在被回滚的风险,假如行使不妥的话还会带来机能题目。Change Stream可以与aggregate framework团结行使,对改观集举办进一步的过滤或转换。 参考链接:https://docs.mongodb.com/manual/aggregation/ 因为Change Stream操作了存储在oplog中的信息,因此对付单历程陈设的MongoDB无法支持Change Stream成果,其只能用于启用了副本集的独立集群或分片集群。 监听的方针 改观变乱 一个Change Stream Event的根基布局如下所示: 字段声名: Change Steram支持的改观范例有以下几个: 操作以下的shell剧本,可以打印出荟萃 T_USER上的改观变乱: 下面提供一些样例,感觉一下: insert变乱 update变乱 replace变乱 delete变乱 invalidate变乱 更多的Change Event信息可以参考:https://docs.mongodb.com/manual/reference/change-events/ 四、实现增量迁徙 本次计划了一个简朴的论坛帖子迁徙样例,用于演示怎样操作Change Stream实现美满的增量迁徙方案。 配景如下: 现有的体系中有一批帖子,每个帖子都属于一个频道(channel),如下表: 新体系中频道字段将回收英文简称,同时要求能支持滑腻进级。按照前面篇幅的论述,我们将行使Change Stream成果实现一个增量迁徙的方案。 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |