12-18 14:29
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[MongoDB] Replication / Oplog 본문

Data Science/MongoDB

[MongoDB] Replication / Oplog

cinema4dr12 2014. 4. 6. 21:09

by Geol Choi | 

oplog(operation log)는 마스터 노드에 요청되는 연산들이 로그로 기록되는 파일이며, local이라는 이름의 db 내의 oplog.rs(rs는 Replica Set의 이름)이라는 이름의 컬렉션 내에 저장된다.

예를 들어 oplog의 내용을 출력하면 다음과 같다:

> show dbs
local   4.279296875GB
test    0.0625GB
> use local
switched to db local
> db.getCollectionNames()
[
        "oplog.rs",
        "slaves",
        "startup_log",
        "system.indexes",
        "system.replset"
]
> db.oplog.rs.find().pretty()
{
        "ts" : Timestamp(1396096489, 1),
        "h" : NumberLong(0),
        "v" : 2,
        "op" : "n",
        "ns" : "",
        "o" : {
                "msg" : "initiating set"
        }
}
{
        "ts" : Timestamp(1396096495, 1),
        "h" : NumberLong("-8745255044808441839"),
        "v" : 2,
        "op" : "n",
        "ns" : "",
        "o" : {
                "msg" : "Reconfig set",
                "version" : 2
        }
}
{
        "ts" : Timestamp(1396096507, 1),
        "h" : NumberLong("-4666497119748582412"),
        "v" : 2,
        "op" : "n",
        "ns" : "",
        "o" : {
                "msg" : "Reconfig set",
                "version" : 3
        }
}
{
        "ts" : Timestamp(1396097326, 1),
        "h" : NumberLong("2929377522288628653"),
        "v" : 2,
        "op" : "i",
        "ns" : "test.tmp",
        "o" : {
                "_id" : ObjectId("5336c12e07a320abf7b320e3"),
                "username" : "gchoi",
                "pwd" : 1234
        }
}

도큐먼트는 위와 같이 "ts", "h", "v", "op", "ns", "o" 등의 키를 포함하는데 주요 키에 대한 설명은 다음과 같다.

ts

연산에 대한 타임스탬프(Timestamp). 4 바이트의 타임스탬프와 4 바이트의 증가 카운터로 구성되어 있다.

op

1 바이트 코드로 수행되는 연산 유형. "i"는 insert를 의미한다.

ns

연산이 수행되었던 컬렉션 이름(네임스페이스).

o

수행할 연산을 지정하는 도큐먼트.


oplog에 대한 몇가지 특징을 살펴보자:

  1. oplog는 마스터와 슬레이브 노드 간 데이터를 동기화하는 것이 주목적이므로 데이터의 쓰기 등과 관련된 연산만 기록된다는 것이다. 즉, 이미 저장된 데이터에 대한 처리를 위한 쿼리는 기록되지 않으며 사실상 기록될 필요가 없다.

  2. oplog에 저장된 연산들은 마스터 서버에서 수행된 연산들과 정확히 일치하는 것은 아니다.

  3. oplogcapped collection에 저장된다.


Comments