mongodb 概述
############對mongo db中某個集合做分片################# 本例中test1為資料庫,test1也為集合名===
1、先enable sharding,開啟資料庫的分片功能
mongos> use admin
mongos> db.runCommand({"enablesharding":"test1"})
2、對具體collection做分片, 選擇片鍵為"_id"
mongos> db.runCommand({"shardcollection":"test1.test1","key":{"_id":1}})
{ "collectionsharded" : "test1.test1", "ok" : 1 }
3、觀察2個分片 shard_01 shard_02 tunks 數量
===========MongoDB=====複製集讀寫設定====
write concern
預設情況下,Primary完成寫操作即返回,Driver可透過設定[Write Concern]來設定寫成功的規則。
如下的write concern規則設定寫必須在大多數節點上成功,超時時間為5s。
cfg = rs.conf()
cfg.settings = {}
cfg.settings.getLastErrorDefaults = { w: "majority", wtimeout: 5000 }
rs.reconfig(cfg)
資料同步
Primary與Secondary之間透過oplog來同步資料,Primary上的寫操作完成後,會向特殊的local.oplog.rs特殊集合寫入一條oplog,Secondary不斷的從Primary取新的oplog並應用。
因oplog的資料會不斷增加,local.oplog.rs被設定成為一個capped集合,當容量達到配置上限時,會將最舊的資料刪除掉。另外考慮到oplog在Secondary上可能重複應用,oplog必須具有冪等性,即重複應用也會得到相同的結果。
如下oplog的格式,包含ts、h、op、ns、o等欄位
{
"ts" : Timestamp(1446011584, 2),
"h" : NumberLong("1687359108795812092"),
"v" : 2,
"op" : "i",
"ns" : "test.nosql",
"o" : { "_id" : ObjectId("563062c0b085733f34ab4129"), "name" : "mongodb", "score" : "100" }
}
}
ts: 操作時間,當前timestamp + 計數器,計數器每秒都被重置
h:操作的全域性唯一標識
v:oplog版本資訊
op:操作型別
i:插入操作
u:更新操作
d:刪除操作
c:執行命令(如createDatabase,dropDatabase)
n:空操作,特殊用途
ns:操作針對的集合
o:操作內容,如果是更新操作
o2:操作查詢where條件,僅update操作包含該欄位
========oplog 與journal日誌問題==========張友東部落格===========
MongoDB 複製集裡寫入一個文件時,需要修改如下資料
將文件資料寫入對應的集合
更新集合的所有索引資訊
寫入一條oplog用於同步
上面3個修改操作,需要確保要麼都成功,要麼都失敗,不能出現部分成功的情況。
MongoDB 在寫入資料時,會將上述3個操作放到一個 wiredtiger 的事務裡,確保「原子性」
wiredtiger 提交事務時,會將所有修改操作應用,並將上述3個操作寫入到一條 journal 操作日誌裡;後臺會週期性的checkpoint,將修改持久化,並移除無用的journal。
誰先寫入?
oplog 與 journal 是 MongoDB 裡不同層次的概念,放在一起比先後本身是不合理的。
oplog 在 MongoDB 裡是一個普通的集合,所以 oplog 的寫入與普通集合的寫入並無區別。
一次寫入,會對應資料、索引,oplog的修改,而這3個修改,會對應一條journal操作日誌
####====具體部分參考了張友東部落格======#####
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28211342/viewspace-2213184/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MongoDB索引概述MongoDB索引
- mongoDB研究筆記:複製集概述MongoDB筆記
- MongoDB副本集故障恢復機制概述MongoDB
- 概述
- 【mongodb】mongodb的安裝MongoDB
- JVM 概述JVM
- Java 概述Java
- Java概述Java
- TCP 概述TCP
- CloudHub概述Cloud
- ElasticSearch 概述Elasticsearch
- SparkSQL 概述SparkSQL
- Kafka 概述Kafka
- JDBC概述JDBC
- Promise 概述Promise
- GraphHttpClient概述HTTPclient
- FastDFS概述AST
- html概述HTML
- SurfaceView概述View
- uoj概述
- (1)概述
- MongoDbMongoDB
- (翻譯) MongoDB(7) 安裝MongoDBMongoDB
- MongoDB之父:MongoDB勝過BigTableMongoDB
- 【Mongodb】 Mongodb sharding 管理之二MongoDB
- 【Mongodb】Mongodb sharding 管理之一MongoDB
- 【Mongodb】如何建立mongodb的replica setMongoDB
- MongoDB入門簡介|MongoDB下載安裝|MongoDB語法MongoDB
- DevOps概述dev
- Express 新手概述Express
- Android概述Android
- Redis Ziplist 概述Redis
- JavaScript物件概述JavaScript物件
- Docker 前沿概述Docker
- Web Storage概述Web
- 【Docker】Docker概述Docker
- Java 集合概述Java
- 9.3 parity概述