Mongodb副本集和分片示例詳解
前言
因?yàn)橹皼](méi)用過(guò)mongo,所以最近的開發(fā)踩了不少坑,現(xiàn)在熟練了不少。
mongo在許多地方用起來(lái)還有許多不如意的地方,比如不知道如何加行鎖,雖然mongo本身可以加寫鎖, 多寫的時(shí)候保證原子性,但不能向mysql在事務(wù)中 select ... for update 這樣加鎖, 這樣可以在應(yīng)用代碼中添加邏輯并且保證該對(duì)應(yīng)行不被讀取或修改。
還好的是Mongodb4.0是支持事務(wù)的(看網(wǎng)上貌似3.6就支持了,但得自己開啟)。剛好前端時(shí)間有些業(yè)務(wù)需求需要用到事務(wù)來(lái)保證數(shù)據(jù)的準(zhǔn)確性,因?yàn)橐粋€(gè)動(dòng)作內(nèi)有多條出入和修改的操作,如果中途報(bào)錯(cuò)需要回滾。
連接mongo的shell后使用 db.version() 來(lái)查看mongodb的版本
Python只用mongo事務(wù)
在python中使用使用 pymongo 來(lái)操作數(shù)據(jù)庫(kù)
import pymongo
mc = pymongo.MongoClient('mongodb://localhost:27018', connect=False, maxPoolSize=2000)
with mc.start_session() as session:
with session.start_transaction():
mc['test']['test'].insert_one({'a': 1}, session=session)
mc['test']['test'].delete_one({'a': 1}, session=session)
...
但在實(shí)際使用中卻報(bào)了個(gè)錯(cuò)
MongoError: Transaction numbers are only allowed on a replica set member or mongos.
上網(wǎng)搜索后很多解決方法都是npm安裝一個(gè)什么包,然后用它啟動(dòng)mongo。
其實(shí)根據(jù)英文的意思也差不多能明白是怎么回事,網(wǎng)上搜索后發(fā)現(xiàn)了根本原因:事務(wù)只支持副本集和切片。而我這開發(fā)環(huán)境是直接mongod啟的
副本集
副本集搭建
啟動(dòng)兩個(gè)mongodb服務(wù)(一個(gè)master,一個(gè)slave)
# 1 /usr/local/mongodb/mongodb4.0.10/bin/mongod \ --bind_ip=0.0.0.0 --port=27018 --logpath=/var/log/mongodb/mongodb_4_0_10.log \ --dbpath=/data/mongo_4.0.10_db \ --replSet rs0 --fork # 2 /usr/local/mongodb/mongodb4.0.10/bin/mongod \ --bind_ip=0.0.0.0 --port=27019 \ --logpath=/var/log/mongodb/mongodb_4_0_10-2.log \ --dbpath=/data/mongo_4.0.10_db-2 \ --replSet rs0 --fork
在mongo shell中執(zhí)行
# 啟動(dòng)一個(gè)新的副本集
rs.initiate()
# 添加一個(gè)副本集
rs.add("localhost.localdomain:27019")
這樣的的話就可以使用mongodb的事務(wù)了
單節(jié)點(diǎn)也是支持事務(wù)的,我多加一個(gè)slave節(jié)點(diǎn)只是為了測(cè)試一下
slave節(jié)點(diǎn)讀
默認(rèn)slave節(jié)點(diǎn)是不能讀的,在Mongo客戶端使用命令 db.setSlaveOk() 來(lái)開啟slave節(jié)點(diǎn)讀,
這樣的可以讀寫分離(master寫,slave讀),關(guān)于slave讀對(duì)副本集間的同步的影響我沒(méi)有實(shí)踐就不寫了,網(wǎng)上有資料介紹。
master選舉
http://www.mongoing.com/archives/295
分片
分片集群我沒(méi)有搭建,這里有個(gè)文章寫的比較不錯(cuò),分片加副本集搭建,這樣既分流的數(shù)據(jù)也保證了數(shù)據(jù)的備份。等有時(shí)間自己搭建我在詳細(xì)記錄這里的坑
http://www.dbjr.com.cn/article/167276.htm
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Mongodb解決不能連接到服務(wù)器的錯(cuò)誤問(wèn)題
這篇文章主要介紹了Mongodb解決不能連接到服務(wù)器的錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
MongoDB4.28開啟權(quán)限認(rèn)證配置用戶密碼登錄功能
這篇文章主要介紹了MongoDB4.28開啟權(quán)限認(rèn)證配置用戶名和密碼認(rèn)證登錄,本文分步驟給大家介紹開啟認(rèn)證登錄的方法,需要的朋友可以參考下2022-01-01
CentOS 6.5系統(tǒng)中使用yum安裝MongoDB 2.6 教程
這篇文章主要介紹了CentOS 6.5系統(tǒng)中使用yum安裝MongoDB 2.6 教程,本文共分5個(gè)步驟完成MongoDB的安裝,需要的朋友可以參考下2015-01-01
mongodb權(quán)限設(shè)置之添加管理員、普通用戶的方法
這篇文章主要介紹了mongodb添加管理員、普通用戶的方法,同時(shí)介紹了mongodb開啟權(quán)限認(rèn)證后PHP客戶端的兩種連接方法,需要的朋友可以參考下2014-06-06
MongoDB最大連接數(shù)設(shè)置失效的異常分析過(guò)程與解決方法
mongodb最大連接數(shù)是20000。所以業(yè)界流傳一段話,千萬(wàn)級(jí)以下的用mysql、千萬(wàn)級(jí)以上的用mongodb,億級(jí)以上的用hadoop。下面這篇文章主要給大家介紹了關(guān)于MongoDB最大連接數(shù)設(shè)置失效的異常分析過(guò)程,需要的朋友可以參考下2018-09-09
CentOS 6.5 x64系統(tǒng)中安裝MongoDB 2.6.0二進(jìn)制發(fā)行版教程
這篇文章主要介紹了CentOS 6.5 x64系統(tǒng)中安裝MongoDB 2.6.0二進(jìn)制發(fā)行版教程,本文分為6個(gè)步驟完成MongoDB的安裝和啟動(dòng),需要的朋友可以參考下2015-01-01
mongodb 數(shù)據(jù)類型(null/字符串/數(shù)字/日期/內(nèi)嵌文檔/數(shù)組等)
MongoDB的文檔類似于JSON,JSON只是一種簡(jiǎn)單的表示數(shù)據(jù)的方式,只包含了6種數(shù)據(jù)類型(null、布爾、數(shù)字、字符串、數(shù)組及對(duì)象),需要的朋友可以參考下2017-04-04
mongodb基礎(chǔ)之用戶權(quán)限管理實(shí)例教程
這篇文章主要給大家介紹了關(guān)于mongodb基礎(chǔ)之用戶權(quán)限管理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06

