查询MongoDBoplog.rs-创新互联

oplog是Capped Collection,默认分配5%的空闲磁盘空间。

来看下oplog.rs的样子:

台前ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!rs_test:SECONDARY> use local switched to db local rs_test:SECONDARY> db.oplog.rs.findOne(); {         "ts" : Timestamp(1465879171, 238),         "h" : NumberLong("-2275413922284641862"),         "v" : 2,         "op" : "u",         "ns" : "MyDB.SyncTable",         "o2" : {                 "_id" : "bbf80260-3d58-49f1-9c8c-e093d5d57527"         },         "o" : {                 "_id" : "bbf80260-3d58-49f1-9c8c-e093d5d57527",                 "EntityId" : "362569",                 "TypeName" : "Product",                 "Times" : 14208,                 "CreateTime" : ISODate("2014-11-15T14:35:51.916Z"),                 "LastModified" : ISODate("2016-06-14T04:38:21.708Z"),                 "LastOperationTime" : ISODate("2016-06-14T04:39:30.957Z")         } }

字段含义

ts:8字节的时间戳,由4字节unix timestamp + 4字节自增计数表示。
这个值很重要,在选举(如master宕机时)新primary时,会选择ts大的那个secondary作为新primary。

op:1字节的操作类型,例如i表示insert,d表示delete。

ns:操作所在的namespace。
o:操作所对应的document,即当前操作的内容(比如更新操作时要更新的的字段和值)
o2: 在执行更新操作时的条件,仅限于update时才有该属性。

其中op,可以是如下几种情形之一:
"i": insert
"u": update
"d": delete
"c": db cmd
"db":声明当前数据库 (其中ns 被设置成为=>数据库名称+ '.')
"n": no op,即空操作,其会定期执行以确保时效性。修改配置,会产生 "n" 操作。

查询示例

oplog.rs系统集合只用于复制,不能创建索引,查询语句会很慢。

> db.oplog.rs.find({},{"ts":1}).sort({$natural: -1}) { "ts" : Timestamp(1406185666, 1) }   { "ts" : Timestamp(1406180043, 1) }   { "ts" : Timestamp(1406180033, 1) }   { "ts" : Timestamp(1406172831, 1) }   { "ts" : Timestamp(1406171938, 1) }   > db.oplog.rs.find({ "ts" : { "$gte" : Timestamp(1406185630, 1) } },{"ts":1})

查询一小时内的oplog

> var SECS_PER_HOUR = 3600 > var now = Math.floor((new Date().getTime()) / 1000) // seconds since epoch right now > db.oplog.rs.find({ "ts" : { "$lt" : Timestamp(now, 1), "$gt" : Timestamp(now - SECS_PER_HOUR, 1) } }

查询某一时间段内的oplog(当然注意时间是UTC存储)

> var since = Math.floor(ISODate("2014-08-12T09:00:00.000Z").getTime() / 1000) > var until = Math.floor(ISODate("2014-08-12T15:00:00.000Z").getTime() / 1000) > db.oplog.rs.find({ "ts" : { "$lt" : Timestamp(until, 1), "$gt" : Timestamp(since, 1) } })

聚合统计各个集合的UPDATE操作量

> db.oplog.rs.aggregate([         { $match: { "op":"u" }},         { $group: { _id:"$ns",count:{$sum:1}}}     ])

oplog参考

Replica Set Oplog
https://docs.mongodb.com/manual/core/replica-set-oplog/

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享文章:查询MongoDBoplog.rs-创新互联
分享链接:http://myzitong.com/article/dopggp.html