MongoDB——oplog
2016-09-07 10:15
260 查看
MongoDB 的Replication是通过一个日志来存储写操作的,这个日志就叫做oplog。
MongoDB 的复制集是通过 Oplog 来实现的,主库的更改操作会被记录到主库的 Oplog
日志中,然后从库通过异步方式复制主库的 Oplog 文件并且将 Oplog 日志应用到从库,从而
实现了与主库的同步。
在默认情况下,oplog分配的是5%的空闲磁盘空间。通常而言,这是一种合理的设置。可以通过mongod --oplogSize来改变oplog的日志大小。
oplog是capped collection,因为oplog的特点(不能太多把磁盘填满了,固定大小)需要,MongoDB才发明了capped collection(the oplog is actually the reason capped collections were invented).
oplog的位置
oplog在local库:
master/slave 架构下
local.oplog.$main;
replica sets 架构下:
local.oplog.rs
sharding 架构下,mongos下不能查看oplog,可到每一片去看。
mongoDB oplog 说明
ts:8字节的时间戳,由4字节unix timestamp + 4字节自增计数表示。这个值很重要,在选举(如master宕机时)新primary时,会选择ts最大的那个secondary作为新primary。
op:1字节的操作类型,例如i表示insert,d表示delete。
ns:操作所在的namespace。
o:操作所对应的document,即当前操作的内容(比如更新操作时要更新的的字段和值)
o2: 在执行更新操作时的where条件,仅限于update时才有该属性
"i": insert
"u": update
"d": delete
"c": db cmd
"db":声明当前数据库 (其中ns 被设置成为=>数据库名称+ '.')
"n": no op,即空操作,其会定期执行以确保时效性
节选自:http://www.cnblogs.com/daizhj/archive/2011/06/27/mongodb_sourcecode_oplog.html
在实践的时候还得注意一个点:mongoDB的副本集(replSet)
当使用复制集(Replica sets)模式时,其会使用下面的local数据库:
local.system.replset 用于复制集配置对象存储 (通过shell下的rs.conf()或直接查询)
local.oplog.rs 一个capped collection集合.可在命令行下使用--oplogSize 选项设置该集合大小尺寸.
local.replset.minvalid 通常在复制集内使用,用于跟踪同步状态(sync status)
mongoDB oplog 的应用
如果需要及时获取mongoDB的增量信息,就可以应用oplog了!
常用的场景模式:索引更新,主动更新缓存等。
通常一个服务监控oplog,将“增量信息”经过一定的处理后塞到ActiveMQ中,相关的应用程序再从ActiveMQ中获取消息进行消费。
概要的实例代码:
注意点:
1)如果当前服务断掉了,要有个断点机制,下次可以接着来。这个主要是对ts字段进行控制。
因此需要实时记录读到了什么位置。
2)如果应用端是异构的,采用一种跨语言的协议,例如ProtoBuf。
3)消息中间件(ActiveMQ)起到解耦、缓冲的作用。
转载:http://www.cnblogs.com/huangfox/p/3484497.html
MongoDB 的复制集是通过 Oplog 来实现的,主库的更改操作会被记录到主库的 Oplog
日志中,然后从库通过异步方式复制主库的 Oplog 文件并且将 Oplog 日志应用到从库,从而
实现了与主库的同步。
在默认情况下,oplog分配的是5%的空闲磁盘空间。通常而言,这是一种合理的设置。可以通过mongod --oplogSize来改变oplog的日志大小。
oplog是capped collection,因为oplog的特点(不能太多把磁盘填满了,固定大小)需要,MongoDB才发明了capped collection(the oplog is actually the reason capped collections were invented).
oplog的位置
oplog在local库:
master/slave 架构下
local.oplog.$main;
replica sets 架构下:
local.oplog.rs
sharding 架构下,mongos下不能查看oplog,可到每一片去看。
mongoDB oplog 说明
ts:8字节的时间戳,由4字节unix timestamp + 4字节自增计数表示。这个值很重要,在选举(如master宕机时)新primary时,会选择ts最大的那个secondary作为新primary。
op:1字节的操作类型,例如i表示insert,d表示delete。
ns:操作所在的namespace。
o:操作所对应的document,即当前操作的内容(比如更新操作时要更新的的字段和值)
o2: 在执行更新操作时的where条件,仅限于update时才有该属性
"i": insert
"u": update
"d": delete
"c": db cmd
"db":声明当前数据库 (其中ns 被设置成为=>数据库名称+ '.')
"n": no op,即空操作,其会定期执行以确保时效性
节选自:http://www.cnblogs.com/daizhj/archive/2011/06/27/mongodb_sourcecode_oplog.html
在实践的时候还得注意一个点:mongoDB的副本集(replSet)
当使用复制集(Replica sets)模式时,其会使用下面的local数据库:
local.system.replset 用于复制集配置对象存储 (通过shell下的rs.conf()或直接查询)
local.oplog.rs 一个capped collection集合.可在命令行下使用--oplogSize 选项设置该集合大小尺寸.
local.replset.minvalid 通常在复制集内使用,用于跟踪同步状态(sync status)
mongoDB oplog 的应用
如果需要及时获取mongoDB的增量信息,就可以应用oplog了!
常用的场景模式:索引更新,主动更新缓存等。
通常一个服务监控oplog,将“增量信息”经过一定的处理后塞到ActiveMQ中,相关的应用程序再从ActiveMQ中获取消息进行消费。
概要的实例代码:
注意点:
1)如果当前服务断掉了,要有个断点机制,下次可以接着来。这个主要是对ts字段进行控制。
因此需要实时记录读到了什么位置。
2)如果应用端是异构的,采用一种跨语言的协议,例如ProtoBuf。
3)消息中间件(ActiveMQ)起到解耦、缓冲的作用。
转载:http://www.cnblogs.com/huangfox/p/3484497.html
相关文章推荐
- mongodb 日志文件 oplog
- mongodb修改oplog大小
- mongodb进阶(3):复制的认证和oplog
- MongoDB:Replica Set 之操作日志 Oplog
- mongodb的oplog遇到的问题
- MongoDB修改oplog size
- mongodb查看连接数、同步时间、oplog及修改表名的操作
- MongoDB介绍及下载与安装
- Mongodb远程访问配置
- Mongodb
- MongoDB 删除数据库
- MongoDB 概念解析
- Spring data mongodb @CreatedBy@LastModifiedBy@CreatedBy@LastModifiedBy SpringSecurityAuditorAware,只记录用户名
- 将MongoDB设为Windows服务
- Mysql与MongoDB对比测试
- mongodb连接
- MongoDB的连接字符串
- MongoDB聚合管道与SQL子句相对比
- mongodb install
- MongoDB应用记录