Mongodb副本集和分片示例詳解
前言
因?yàn)橹皼]用過mongo,所以最近的開發(fā)踩了不少坑,現(xiàn)在熟練了不少。
mongo在許多地方用起來還有許多不如意的地方,比如不知道如何加行鎖,雖然mongo本身可以加寫鎖, 多寫的時(shí)候保證原子性,但不能向mysql在事務(wù)中 select ... for update 這樣加鎖, 這樣可以在應(yīng)用代碼中添加邏輯并且保證該對應(yīng)行不被讀取或修改。
還好的是Mongodb4.0是支持事務(wù)的(看網(wǎng)上貌似3.6就支持了,但得自己開啟)。剛好前端時(shí)間有些業(yè)務(wù)需求需要用到事務(wù)來保證數(shù)據(jù)的準(zhǔn)確性,因?yàn)橐粋€(gè)動(dòng)作內(nèi)有多條出入和修改的操作,如果中途報(bào)錯(cuò)需要回滾。
連接mongo的shell后使用 db.version() 來查看mongodb的版本
Python只用mongo事務(wù)
在python中使用使用 pymongo 來操作數(shù)據(jù)庫
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)只是為了測試一下
slave節(jié)點(diǎn)讀
默認(rèn)slave節(jié)點(diǎn)是不能讀的,在Mongo客戶端使用命令 db.setSlaveOk() 來開啟slave節(jié)點(diǎn)讀,
這樣的可以讀寫分離(master寫,slave讀),關(guān)于slave讀對副本集間的同步的影響我沒有實(shí)踐就不寫了,網(wǎng)上有資料介紹。
master選舉
http://www.mongoing.com/archives/295
分片
分片集群我沒有搭建,這里有個(gè)文章寫的比較不錯(cuò),分片加副本集搭建,這樣既分流的數(shù)據(jù)也保證了數(shù)據(jù)的備份。等有時(shí)間自己搭建我在詳細(xì)記錄這里的坑
http://chabaoo.cn/article/167276.htm
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。
- 基于docker-compose構(gòu)建Mongodb副本集的示例詳解
- docker搭建mongodb單節(jié)點(diǎn)副本集的實(shí)現(xiàn)
- 聊聊MongoDB?帶訪問控制的副本集部署問題
- MongoDB 副本集的搭建過程
- mongodb 4.0副本集搭建的全過程
- mongodb3.4集群搭建實(shí)戰(zhàn)之高可用的分片+副本集
- Mongodb3.0.5 副本集搭建及spring和java連接副本集配置詳細(xì)介紹
- 詳解MongoDB中用sharding將副本集分配至服務(wù)器集群的方法
- MongoDB的主從復(fù)制及副本集的replSet配置教程
- MongoDB副本集部署完整教程(最新推薦)
相關(guān)文章
MongoDB進(jìn)階之動(dòng)態(tài)字段設(shè)計(jì)詳解
這篇文章主要給大家介紹了MongoDB進(jìn)階之動(dòng)態(tài)字段設(shè)計(jì)的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2017-06-06關(guān)于MongoTemplate通過id查詢?yōu)閚ull的問題
這篇文章主要介紹了關(guān)于MongoTemplate通過id查詢?yōu)閚ull的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01windows7下使用MongoDB實(shí)現(xiàn)倉儲設(shè)計(jì)
本文給大家介紹了本人在物聯(lián)網(wǎng)環(huán)境下基于MongoDB實(shí)現(xiàn)的倉儲的配置信息及具體的使用示例,非常的實(shí)用,有需要的小伙伴可以參考下2017-09-09MongoDB4.28開啟權(quán)限認(rèn)證配置用戶密碼登錄功能
這篇文章主要介紹了MongoDB4.28開啟權(quán)限認(rèn)證配置用戶名和密碼認(rèn)證登錄,本文分步驟給大家介紹開啟認(rèn)證登錄的方法,需要的朋友可以參考下2022-01-01