千家信息网

查询MongoDB oplog.rs

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,oplog是Capped Collection,默认分配5%的空闲磁盘空间。来看下oplog.rs的样子:rs_test:SECONDARY> use localswitched to db loca
千家信息网最后更新 2025年02月02日查询MongoDB oplog.rs

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

来看下oplog.rs的样子:

rs_test:SECONDARY> use localswitched to db localrs_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/


查询 字节 时间 更新 字段 数据 数据库 最大 重要 内容 名称 含义 小时 属性 情形 所在 时效 时效性 时间段 机时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 通化软件开发招聘 pgsql数据库请求数据 有哪些常用的基因组数据库 福建刷单平台软件开发公司 登录亚马逊找不到服务器 河南省司法网络技术监定所 大学生网络安全感问卷 数据库创建界面操作 网络安全面临的挑战是什么 数据库表插入数据类型是啥 中邮消费金融软件开发岗 软件开发日语概论 武汉宜源互联网科技怎么样 山西潮流软件开发值得推荐 戴尔服务器更换主板后注意事项 数据库t3怎么安装 网站服务器最多多少人访问 网络安全教育专题班会 大华软件开发薪酬 如何消除网络安全的作文 怎么调用vs里的数据库 网络安全教育考核 安徽省咔哈网络技术 yml配置数据库密码密文 做好网络安全工作培训感想 金山云网络技术有限公司经营范围 分布式数据库的技术实现 北京的软件开发公司 云南高校网络安全专家 两个电脑同时登录一个服务器
0