我的编程空间,编程开发者的网络收藏夹
学习永远不晚

查询MongoDB oplog.rs

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

查询MongoDB oplog.rs

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

来看下oplog.rs的样子:

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/


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

查询MongoDB oplog.rs

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

过滤查询 mongodb Golang

php小编西瓜今天要为大家介绍的是关于过滤查询mongodb的Golang实现。在使用mongodb数据库进行数据查询时,我们经常需要对查询结果进行过滤,以满足特定的条件。Golang作为一种强大的编程语言,提供了丰富的mongodb驱动库
过滤查询 mongodb Golang
2024-02-12

mongodb如何查询区间

在MongoDB中查询区间可以使用$gt(大于)、$lt(小于)、$gte(大于等于)、$lte(小于等于)等比较运算符来实现。假设我们有一个名为"students"的集合,其中包含了学生的成绩信息。如果我们想查询成绩在80到90之间的学生
2023-09-06

MongoDB聚合查询详解

这篇文章主要介绍了MongoDB聚合查询详解的相关资料,需要的朋友可以参考下
2022-12-26

编程热搜

目录