|
|
|
# MongoChangeReader
|
|
|
|
该reader是通过监控 mongoDB的oplog,将变化数据读出。
|
|
|
|
|
|
|
|
## 输出的数据
|
|
|
|
输出的数据与mongoDB中文档的结构保持一致,并在文档中增加了如下“元信息”
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
|
|
|
|
"_mongo_oplog": { ... },
|
|
|
|
"_mongo_ns": "<database>.<collection>"
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
### _mongo_oplog 中的内容
|
|
|
|
|
|
|
|
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" 操作。 |