数据实时同步之MongoDB


数据实时同步之MongoDB

文章插图
 
转载本文需注明出处:微信公众号EAWorld,违者必究 。
?前言:
随着传统企业的发展,企业数据呈现多样化,海量化,难以实现数据快速分析 。MongoDB是当前很多企业使用的,当日积月累数据很大时,就可能会忽略历史数据的价值,可以把数据实时同步到其他储存:HBASE、HIVE、HDFS文件等等 。在当前大数据、云计算的时代潮流下,实现数据价值,对企业决策力、洞察发现力极其有益 。
在MongoDB 3.6 之后版本,提供Change Streams API 。但目前数据量庞大的仍还是3.6之前版本的历史悠久企业 。这些资产数据是不可缺少的,所以当使用3.6之前版本,两步走:首先对历史库数据迁移 。再开始监听MongoDB库增量变化,实现MongoDB的监听和实时同步(Oplog) 。
目录:
1.Oplog简介
2.MongoDB服务配置启动
3.Oplog获取和查看
4.简单JAVA代码实现
1.Oplog简介1、认识
当在MongoDB的Primary下,我们进行操作库表时,这些操作会以特殊格式储存在local库下的一个固定集合中(下面会介绍到) 。Secondary(次)就会通过获取主的oplog,来进行同步数据,并且存储自己的Oplog 。所以Oplog 也是Mongodb Replication的重要组成了 。
2、大小
Mongodb默认将其大小分配的是5%的空闲磁盘空间 。也可以在创建 mongod 服务时,在mongo.conf中oplogSize自定义参数设置,单位是mb,如果不指定,不同操作系统上的 oplog 默认大小不同,具体为以下:
For 64-bit linux, Solaris, and FreeBSD systems:可以分配 5% 的剩余空间 。如果分配的值仍小于 1GB,那么会分配 1GB 。
For 64-bit OS X systems:分配 183MB 。
For 32-bit systems:分配 48MB 。
oplog的内存占比速度与系统处理写请求的速度相当,所以很快就会增量更新数据 。时间上完全可以支持实时同步 。
3、oplog库表
oplog会自动创建在local库的collection:
a、master/slave 架构下:local.oplog.$main
数据实时同步之MongoDB

文章插图
 
b、replica sets 架构下:local.oplog.rs
数据实时同步之MongoDB

文章插图
 
c、sharding 架构下,mongos下不能查看oplog,可到每一片去
2.MongoDB服务配置启动1.解压当前目录
tar zxvf mongodb-linux-x86_64-3.2.22.tgz -C ./ mongodb-3.2.22
2.创建data、logs/mongodb.log文件夹
数据实时同步之MongoDB

文章插图
 
3. bin下创建mongodb.conf自定义配置
数据实时同步之MongoDB

文章插图
 
4. 创建启动脚本
start-mongodb.sh,赋权chmod +x start-mongodb.sh
数据实时同步之MongoDB

文章插图
 
5. 启动 ./start-mongodb.sh
6.测试
./mongo,默认进入的collections是test,PRIMARY节点
数据实时同步之MongoDB

文章插图
 

数据实时同步之MongoDB

文章插图
 
3.oplog获取和查看1. oplog数据结构
分析oplog中字段的含义
  • ts: 8字节的时间戳,由4字节unix timestamp + 4字节自增计数表示 。这个值很重要,在选举(如master宕机时)新primary时,会选择ts最大的那个secondary作为新primary
  • op:1字节的操作类型
  • "i":insert
  • "u":update
  • "d":delete
  • "c":db cmd
  • "db":声明当前数据库 (其中ns 被设置成为=>数据库名称+ '.')
  • "n": no op,即空操作,其会定期执行以确保时效性
  • ns:操作所在的namespace
  • o:操作所对应的document,即当前操作的内容(比如更新操作时要更新的的字段和值)
  • o2: 在执行更新操作时的where条件,仅限于update时才有该属性
2. 查看oplog的基本信息
通过"db.printReplicationInfo()"命令可以查看oplog的信息
数据实时同步之MongoDB

文章插图
 
字段说明: