加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

MongoDB Stream是如何实现完美数据增量迁移的?

发布时间:2018-08-18 04:55:11 所属栏目:编程 来源:zale
导读:技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战 一、背景介绍 最近微服务架构火得不行,但本质上也只是风口上的一个热点词汇。 作为笔者的经验来说,想要应用一个新的架构需要带来的变革成本是非常高的。 尽管如此,目前还是有许

定义Channel频道的转换表:

  1. public static enum Channel {  
  2.     Food("美食"),  
  3.     Emotion("情感"), 
  4.     Pet("宠物"),  
  5.     House("家居"),  
  6.     Marriage("征婚"),  
  7.     Education("教育"),  
  8.     Travel("旅游") ; 
  9.  
  10.     private final String oldName;  
  11.     public String getOldName() {  
  12.         return oldName;  
  13.     }  
  14.     private Channel(String oldName) {  
  15.         this.oldName = oldName;  
  16.     }  
  17.     /**  
  18.      * 转换为新的名称  
  19.      *  
  20.      * @param oldName  
  21.      * @return  
  22.      */  
  23.     public static String toNewName(String oldName) {  
  24.         for (Channel channel : values()) {  
  25.             if (channel.oldName.equalsIgnoreCase(oldName)) {  
  26.                 return channel.name();  
  27.             }  
  28.         }  
  29.         return "";  
  30.     }  
  31.     /**  
  32.      * 返回一个随机频道  
  33.      *  
  34.      * @return  
  35.      */  
  36.     public static Channel random() {  
  37.         Channel[] channels = values();  
  38.         int idx = (int) (Math.random() * channels.length);  
  39.         return channels[idx];  
  40.     }  

为topic表预写入1w条记录:

MongoDB Stream是如何实现完美数据增量迁移的?

开启监听任务,将topic上的所有变更写入到增量表:

MongoDB Stream是如何实现完美数据增量迁移的?

代码中通过watch命令获得一个MongoCursor对象,用于遍历所有的变更。

FullDocument.UPDATE_LOOKUP选项启用后,在update变更事件中将携带完整的文档数据(FullDocument)。

watch()命令提交后,mongos会与分片上的mongod(主节点)建立订阅通道,这可能需要花费一点时间。

为了模拟线上业务的真实情况,启用几个线程对topic表进行持续写操作:

MongoDB Stream是如何实现完美数据增量迁移的?

ChangeTask实现逻辑如下:

MongoDB Stream是如何实现完美数据增量迁移的?

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读