本篇文章小编给大家分享一下MongoDB高效读写海量数据代码方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
常见应用场景
分布式的日志收集: elk 单节点最多 32g , mongodb 越多越好
传感器(电子产品) --- 数据库 --- MongoDB
地理地图
网络爬虫
大数据时代的3V
海量 Volume
多样 Variety
实时 Velocity
大数据库时代的3高
高并发
高可扩
高性能
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
注意:默认从库是不能读取,需要设置SlaveOk的状态:
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
缺点:当主库挂了,需要手动切换到从库
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
设置:安排rs1进主节点,rs2、rs3进从节点。
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({});
测试:强行停止主库rs1,检查从库是否能分配并切换到主库 ,在继续强行停止分配后的主库rs2
docker stop rs1id docker exec -it rs2id /bin/bash docker stop rs2id docker exec -it rs3id /bin/bash docker-compose rm
结论:
当主节点rs1挂了,会有从节点过来替代原有主库的位置,但是当仅剩最后一个从库时,无法切换为主库。
当主节点rs1重新启动恢复后,只会立马变为从库,不再是主库。除非等到现在的主库挂了,才有可能重新回到主库的位置。
问题:当主节点rs1挂了,会有从节点过来替代原有主库的位置,但是具体是哪一个从库没有办法控制。所以我们需要添加一个冲裁来解决这个问题。
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({});
注意:当存在arbiter节点 (只是仲裁,并不存储数据)
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔