MongoDB高效讀寫(xiě)海量數(shù)據(jù)的方法
MongoDB 簡(jiǎn)介
高性能,易部署,易使用
常見(jiàn)應(yīng)用場(chǎng)景
- 分布式的日志收集: elk 單節(jié)點(diǎn)最多 32g , mongodb 越多越好
- 傳感器(電子產(chǎn)品) --- 數(shù)據(jù)庫(kù) --- MongoDB
- 地理地圖
- 網(wǎng)絡(luò)爬蟲(chóng)
大數(shù)據(jù)時(shí)代的3V
- 海量 Volume
- 多樣 Variety
- 實(shí)時(shí) Velocity
大數(shù)據(jù)庫(kù)時(shí)代的3高
- 高并發(fā)
- 高可擴(kuò)
- 高性能
MongoDB 集群
1. 一主一從
docker-compose.yml
version: '2' services: master: image: mongo:3.4 volumes: - /data/mongodbml/master:/data/db command: mongod --dbpath /data/db --master slaver: image:mongo:3.4 volumes: - /data/mongodbml/slaver:/data/db command: mongod --dbpath /data/db --slave --source master:27017 links: - master
注意: 默認(rèn)從庫(kù)是不能讀取,需要設(shè)置 SlaveOk
的狀態(tài):
docker-compose up -d docker ps docker exec -it masterid /bin/bash mongo > show databases; > use test; > db.userinfo.insert({"name":"master"}); > db.userinfo.find({}); exit docker exec -it slaveid /bin/bash mongo > show databases; > db.getMongo().setSlaveOk(); > use test; > db.userinfo.find({}); docker-compose rm
缺點(diǎn): 當(dāng)主庫(kù)掛了,需要手動(dòng)切換到從庫(kù)
2. 一主二從
docker-compose.yml
version: '2' services: rs1: image: mongo:3.4 volumes: - /data/mongodbtest/replset/rs1:/data/db command: mongod --dbpath /data/db --replset myset rs2: image:mongo:3.4 volumes: - /data/mongodbtest/replset/rs2:/data/db command: mongod --dbpath /data/db --replset myset rs3: image:mongo:3.4 volumes: - /data/mongodbtest/replset/rs3:/data/db command: mongod --dbpath /data/db --replset myset
設(shè)置: 安排 rs1
進(jìn)主節(jié)點(diǎn),rs2
、rs3
進(jìn)從節(jié)點(diǎn)。
docker-compose up -d docker ps docker exec -it rs1id /bin/bash mongo > rs.initiate() myset:SECONDARY> rs.add('rs2:27017'); myset:PRIMARY> rs.add('rs3:27017'); myset:PRIMARY> rs.conf() myset:PRIMARY> show databases; myset:PRIMARY> use test; myset:PRIMARY> db.userinfo.insert({"name":"rs1"}); myset:PRIMARY> db.userinfo.find({}); exit docker exec -it rs2id /bin/bash mongo myset:SECONDARY> rs.status(); myset:SECONDARY> rs.slaveOk(); myset:SECONDARY> show databases; myset:SECONDARY> use test; myset:SECONDARY> db.userinfo.find({}); exit docker exec -it rs3id /bin/bash mongo myset:SECONDARY> rs.slaveOk(); myset:SECONDARY> show databases; myset:SECONDARY> use test; myset:SECONDARY> db.userinfo.find({});
測(cè)試: 強(qiáng)行停止主庫(kù) rs1
,檢查從庫(kù)是否能分配并切換到主庫(kù) ,在繼續(xù)強(qiáng)行停止分配后的主庫(kù) rs2
docker stop rs1id docker exec -it rs2id /bin/bash docker stop rs2id docker exec -it rs3id /bin/bash docker-compose rm
結(jié)論:
當(dāng)主節(jié)點(diǎn) rs1
掛了,會(huì)有從節(jié)點(diǎn)過(guò)來(lái)替代原有主庫(kù)的位置,但是當(dāng)僅剩最后一個(gè)從庫(kù)時(shí),無(wú)法切換為主庫(kù)。
當(dāng)主節(jié)點(diǎn) rs1
重新啟動(dòng)恢復(fù)后,只會(huì)立馬變?yōu)閺膸?kù),不再是主庫(kù)。除非等到現(xiàn)在的主庫(kù)掛了,才有可能重新回到主庫(kù)的位置。
問(wèn)題: 當(dāng)主節(jié)點(diǎn) rs1
掛了,會(huì)有從節(jié)點(diǎn)過(guò)來(lái)替代原有主庫(kù)的位置,但是具體是哪一個(gè)從庫(kù)沒(méi)有辦法控制。所以我們需要添加一個(gè)沖裁
來(lái)解決這個(gè)問(wèn)題。
3. 一主一從一仲裁
docker-compose.yml
version: '2' services: master: image: mongo:3.4 volumes: - /data/mongodbnode/replset/rs1:/data/db command: mongod --dbpath /data/db --replset newset --oplogSize 128 slave: image:mongo:3.4 volumes: - /data/mongodbnode/replset/rs2:/data/db command: mongod --dbpath /data/db --replset newset --oplogSize 128 arbiter: image:mongo:3.4 command: mongod --dbpath /data/db --replset newset --smallfiles --oplogSize 128
配置:
docker-compose up -d docker ps docker exec -it masterid /bin/bash mongo > rs.initiate() newset:SECONDARY> rs.add('slave:27017'); newset:PRIMARY> rs.add('arbiter:27017', true); newset:PRIMARY> re.conf() newset:PRIMARY> show databases; newset:PRIMARY> use test; newset:PRIMARY> db.userinfo.insert({"name":"master"}); newset:PRIMARY> db.userinfo.find({}); exit docker exec -it slaveid /bin/bash newset:SECONDARY> res.slaveOk(); newset:SECONDARY> use test; newset:SECONDARY> db.userinfo.find({}); exit docker exec -it arbiterid /bin/bash newset:ARBITER> res.slaveOk(); newset:ARBITER> show databases; newset:ARBITER> db.userinfo.find({});
注意: 當(dāng)存在 arbiter
節(jié)點(diǎn) (只是仲裁,并不存儲(chǔ)數(shù)據(jù))
到此這篇關(guān)于MongoDB高效讀寫(xiě)海量數(shù)據(jù)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- MongoDB中優(yōu)雅刪除大量數(shù)據(jù)的三種方式
- mongodb三分鐘入門大全
- mongodb啟動(dòng)方法小結(jié)
- MongoDB數(shù)據(jù)庫(kù)授權(quán)認(rèn)證的實(shí)現(xiàn)
- MongoDB數(shù)據(jù)庫(kù)安裝部署及警告優(yōu)化
- 關(guān)于對(duì)MongoDB索引的一些簡(jiǎn)單理解
- MongoDB日志切割的三種方式總結(jié)
- mongodb清除連接和日志的正確方法分享
- mongodb數(shù)據(jù)庫(kù)遷移變更的解決方案
- 常用的MongoDB查詢語(yǔ)句的示例代碼
- 詳解MongoDB的條件查詢和排序
- MongoDB如何更新多級(jí)文檔的數(shù)據(jù)
- MongoDB 常用的crud操作語(yǔ)句
- MongoDB數(shù)據(jù)庫(kù)的安裝步驟
相關(guān)文章
解決mongodb在ubuntu下啟動(dòng)失敗,提示couldn‘t remove fs lock errno:9 Bad
之前MongoDB啟動(dòng)的時(shí)候是蠻正常的,不知道后來(lái)啟動(dòng)報(bào)錯(cuò)了,就把粘貼出來(lái)查詢了。經(jīng)過(guò)一番百度,才找的處理的辦法,分享給大家2014-08-08mongodb數(shù)據(jù)庫(kù)入門學(xué)習(xí)筆記之下載、安裝、啟動(dòng)、連接操作解析
這篇文章主要介紹了mongodb數(shù)據(jù)庫(kù)入門學(xué)習(xí)筆記之下載、安裝、啟動(dòng)、連接操作,結(jié)合簡(jiǎn)單示例形式分析了MongoDB數(shù)據(jù)庫(kù)的基本下載、解壓、啟動(dòng)服務(wù)、連接服務(wù)等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-10-10NoSQL優(yōu)缺點(diǎn)與MongoDB數(shù)據(jù)庫(kù)簡(jiǎn)介
這篇文章介紹了NoSQL的優(yōu)缺點(diǎn)與MongoDB數(shù)據(jù)庫(kù),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06在PyCharm中安裝Mongo Plugin的詳細(xì)教程
這篇文章主要介紹了在PyCharm中安裝Mongo Plugin的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11Centos 7下Mongodb開(kāi)機(jī)無(wú)法自啟動(dòng)的解決方法
這篇文章主要介紹了Centos 7下Mongodb開(kāi)機(jī)無(wú)法自啟動(dòng)的解決方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-03-031億條記錄的MongoDB數(shù)據(jù)庫(kù)隨機(jī)查詢性能測(cè)試
這篇文章主要為大家分享下1億條記錄的MongoDB數(shù)據(jù)庫(kù)隨機(jī)查詢性能測(cè)試結(jié)果,需要的朋友可以參考下2013-12-12MongoDB數(shù)據(jù)庫(kù)用戶角色和權(quán)限管理詳解
這篇文章主要給大家介紹了關(guān)于MongoDB數(shù)據(jù)庫(kù)用戶角色和權(quán)限管理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11