人走茶凉 数据实时同步之MongoDB


?前言:
随着传统企业的发展 , 企业数据呈现多样化 , 海量化 , 难以实现数据快速分析 。 MongoDB是当前很多企业使用的 , 当日积月累数据很大时 , 就可能会忽略历史数据的价值 , 可以把数据实时同步到其他储存:HBASE、HIVE、HDFS文件等等 。 在当前大数据、云计算的时代潮流下 , 实现数据价值 , 对企业决策力、洞察发现力极其有益 。
在MongoDB3.6之后版本 , 提供ChangeStreamsAPI 。 但目前数据量庞大的仍还是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也是MongodbReplication的重要组成了 。
2、大小
Mongodb默认将其大小分配的是5%的空闲磁盘空间 。 也可以在创建mongod服务时 , 在mongo.conf中oplogSize自定义参数设置 , 单位是mb , 如果不指定 , 不同操作系统上的oplog默认大小不同 , 具体为以下:
For64-bitLinux,Solaris,andFreeBSDsystems:可以分配5%的剩余空间 。 如果分配的值仍小于1GB , 那么会分配1GB 。
For64-bitOSXsystems:分配183MB 。
For32-bitsystems:分配48MB 。
oplog的内存占比速度与系统处理写请求的速度相当 , 所以很快就会增量更新数据 。 时间上完全可以支持实时同步 。
3、oplog库表
oplog会自动创建在local库的collection:
a、master/slave架构下:local.oplog.$main
2.MongoDB服务配置启动1.解压当前目录
tarzxvfmongodb-linux-x86_64-3.2.22.tgz-C./mongodb-3.2.22
2.创建data、logs/mongodb.log文件夹
start-mongodb.sh , 赋权chmod+xstart-mongodb.sh
6.测试
./mongo , 默认进入的collections是test , PRIMARY节点
分析oplog中字段的含义
ts:8字节的时间戳 , 由4字节unixtimestamp+4字节自增计数表示 。 这个值很重要 , 在选举(如master宕机时)新primary时 , 会选择ts最大的那个secondary作为新primaryop:1字节的操作类型"i":insert"u":update"d":delete"c":dbcmd"db":声明当前数据库(其中ns被设置成为=>数据库名称+'.')"n":noop,即空操作 , 其会定期执行以确保时效性ns:操作所在的namespaceo:操作所对应的document , 即当前操作的内容(比如更新操作时要更新的的字段和值)o2:在执行更新操作时的where条件 , 仅限于update时才有该属性2.查看oplog的基本信息
通过"db.printReplicationInfo()"命令可以查看oplog的信息
configuredoplogsize:oplog文件大小loglengthstarttoend:oplog日志的启用时间段oplogfirsteventtime:第一个事务日志的产生时间oploglasteventtime:最后一个事务日志的产生时间now:现在的时间3、查看oplog日志数据
这里我们一般会重视数据的变化 , 所以列出insert、update、delete示例
【人走茶凉 数据实时同步之MongoDB】添加一条数据:
db.test.insert({"name":"这是一侧测试","age":"18


    推荐阅读