本篇內(nèi)容介紹了“怎么對MongoDB中某個集合做分片”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
專注于為中小企業(yè)提供網(wǎng)站設計、成都網(wǎng)站設計服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)大柴旦免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千多家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
本例中test1為數(shù)據(jù)庫,test1也為集合名
1、先enable sharding,開啟數(shù)據(jù)庫的分片功能
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 數(shù)量
===========MongoDB=====復制集讀寫設置====
write concern
默認情況下,Primary完成寫操作即返回,Driver可通過設置[Write Concern]來設置寫成功的規(guī)則。
如下的write concern規(guī)則設置寫必須在大多數(shù)節(jié)點上成功,超時時間為5s。
cfg = rs.conf()
cfg.settings = {}
cfg.settings.getLastErrorDefaults = { w: "majority", wtimeout: 5000 }
rs.reconfig(cfg)
數(shù)據(jù)同步
Primary與Secondary之間通過oplog來同步數(shù)據(jù),Primary上的寫操作完成后,會向特殊的local.oplog.rs特殊集合寫入一條oplog,Secondary不斷的從Primary取新的oplog并應用。
因oplog的數(shù)據(jù)會不斷增加,local.oplog.rs被設置成為一個capped集合,當容量達到配置上限時,會將最舊的數(shù)據(jù)刪除掉。另外考慮到oplog在Secondary上可能重復應用,oplog必須具有冪等性,即重復應用也會得到相同的結(jié)果。
如下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 + 計數(shù)器,計數(shù)器每秒都被重置
h:操作的全局唯一標識
v:oplog版本信息
op:操作類型
i:插入操作
u:更新操作
d:刪除操作
c:執(zhí)行命令(如createDatabase,dropDatabase)
n:空操作,特殊用途
ns:操作針對的集合
o:操作內(nèi)容,如果是更新操作
o2:操作查詢where條件,僅update操作包含該字段
========oplog 與journal日志問題==========張友東博客===========
MongoDB 復制集里寫入一個文檔時,需要修改如下數(shù)據(jù)
將文檔數(shù)據(jù)寫入對應的集合
更新集合的所有索引信息
寫入一條oplog用于同步
上面3個修改操作,需要確保要么都成功,要么都失敗,不能出現(xiàn)部分成功的情況。
MongoDB 在寫入數(shù)據(jù)時,會將上述3個操作放到一個 wiredtiger 的事務里,確?!冈有浴?/p>
wiredtiger 提交事務時,會將所有修改操作應用,并將上述3個操作寫入到一條 journal 操作日志里;后臺會周期性的checkpoint,將修改持久化,并移除無用的journal。
誰先寫入?
oplog 與 journal 是 MongoDB 里不同層次的概念,放在一起比先后本身是不合理的。
oplog 在 MongoDB 里是一個普通的集合,所以 oplog 的寫入與普通集合的寫入并無區(qū)別。
一次寫入,會對應數(shù)據(jù)、索引,oplog的修改,而這3個修改,會對應一條journal操作日志
“怎么對mongodb中某個集合做分片”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!