use local switched to db local ..."/>
溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

查詢MongoDB oplog.rs

發(fā)布時(shí)間:2020-06-09 23:34:35 來源:網(wǎng)絡(luò) 閱讀:11684 作者:UltraSQL 欄目:MongoDB數(shù)據(jù)庫

oplog是Capped Collection,默認(rèn)分配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字節(jié)的時(shí)間戳,由4字節(jié)unix timestamp + 4字節(jié)自增計(jì)數(shù)表示。
這個(gè)值很重要,在選舉(如master宕機(jī)時(shí))新primary時(shí),會(huì)選擇ts最大的那個(gè)secondary作為新primary。

op:1字節(jié)的操作類型,例如i表示insert,d表示delete。

ns:操作所在的namespace。
o:操作所對(duì)應(yīng)的document,即當(dāng)前操作的內(nèi)容(比如更新操作時(shí)要更新的的字段和值)
o2: 在執(zhí)行更新操作時(shí)的條件,僅限于update時(shí)才有該屬性。

其中op,可以是如下幾種情形之一:
"i": insert
"u": update
"d": delete
"c": db cmd
"db":聲明當(dāng)前數(shù)據(jù)庫 (其中ns 被設(shè)置成為=>數(shù)據(jù)庫名稱+ '.')
"n": no op,即空操作,其會(huì)定期執(zhí)行以確保時(shí)效性。修改配置,會(huì)產(chǎn)生 "n" 操作。


查詢示例


oplog.rs系統(tǒng)集合只用于復(fù)制,不能創(chuàng)建索引,查詢語句會(huì)很慢。

> 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})


查詢一小時(shí)內(nèi)的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) } }


查詢某一時(shí)間段內(nèi)的oplog(當(dāng)然注意時(shí)間是UTC存儲(chǔ))

> 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) } })


聚合統(tǒng)計(jì)各個(gè)集合的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/


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI