主頁(yè) > 知識(shí)庫(kù) > Mongodb副本集和分片示例詳解

Mongodb副本集和分片示例詳解

熱門標(biāo)簽:小裙科技電銷機(jī)器人怎樣 crm外呼系統(tǒng)聯(lián)系方式 內(nèi)蒙古營(yíng)銷智能外呼系統(tǒng)哪個(gè)好 智能外呼系統(tǒng)官網(wǎng) 青白江400企業(yè)電話申請(qǐng) 長(zhǎng)沙電銷外呼防封卡是什么 外呼線路資源屬于電信業(yè)務(wù)嗎 河南電話外呼系統(tǒng)招商 呼和浩特外呼系統(tǒng)原理是什么

前言

因?yàn)橹皼](méi)用過(guò)mongo,所以最近的開(kāi)發(fā)踩了不少坑,現(xiàn)在熟練了不少。

mongo在許多地方用起來(lái)還有許多不如意的地方,比如不知道如何加行鎖,雖然mongo本身可以加寫(xiě)鎖, 多寫(xiě)的時(shí)候保證原子性,但不能向mysql在事務(wù)中 select ... for update 這樣加鎖, 這樣可以在應(yīng)用代碼中添加邏輯并且保證該對(duì)應(yīng)行不被讀取或修改。

還好的是Mongodb4.0是支持事務(wù)的(看網(wǎng)上貌似3.6就支持了,但得自己開(kāi)啟)。剛好前端時(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ù)只支持副本集和切片。而我這開(kāi)發(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)開(kāi)啟slave節(jié)點(diǎn)讀,

這樣的可以讀寫(xiě)分離(master寫(xiě),slave讀),關(guān)于slave讀對(duì)副本集間的同步的影響我沒(méi)有實(shí)踐就不寫(xiě)了,網(wǎng)上有資料介紹。

master選舉

http://www.mongoing.com/archives/295

分片

分片集群我沒(méi)有搭建,這里有個(gè)文章寫(xiě)的比較不錯(cuò),分片加副本集搭建,這樣既分流的數(shù)據(jù)也保證了數(shù)據(jù)的備份。等有時(shí)間自己搭建我在詳細(xì)記錄這里的坑

https://www.jb51.net/article/167276.htm

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • 如何為MongoDB添加分片副本集
  • 分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù)之MongoDB分片集群的問(wèn)題
  • MongoDB搭建高可用集群的完整步驟(3個(gè)分片+3個(gè)副本)
  • MongoDB分片集群部署詳解
  • MongoDB分片在部署與維護(hù)管理中常見(jiàn)的事項(xiàng)總結(jié)大全
  • 詳解MongoDB4.0構(gòu)建分布式分片群集
  • MongoDB分片鍵的選擇和案例實(shí)例詳解
  • MongoDB分片詳解
  • mongodb分片技術(shù)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
  • mongodb3.4集群搭建實(shí)戰(zhàn)之高可用的分片+副本集
  • 深入理解MongoDB分片的管理
  • Mongodb 刪除添加分片與非分片表維護(hù)
  • MongoDB 主分片(primary shard)相關(guān)總結(jié)

標(biāo)簽:舟山 楚雄 安順 白山 呼倫貝爾 池州 菏澤 黃石

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Mongodb副本集和分片示例詳解》,本文關(guān)鍵詞  Mongodb,副本,集,和,分片,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Mongodb副本集和分片示例詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Mongodb副本集和分片示例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章