本文小编为大家详细介绍“MongoDB如何高效读写海量数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“mongoDB如何高效读写海量数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。MonGoDB
本文小编为大家详细介绍“MongoDB如何高效读写海量数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“mongoDB如何高效读写海量数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
高性能,易部署,易使用
海量 Volume
多样 Variety
实时 Velocity
高可扩
高性能
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 -ddocker psdocker exec -it masterid /bin/bashmongo> show databases;> use test;> db.userinfo.insert({"name":"master"});> db.userinfo.find({});exitdocker exec -it slaveid /bin/bashmongo> show databases;> db.getMongo().setSlaveOk();> use test;> db.userinfo.find({});docker-compose rm
缺点: 当主库挂了,需要手动切换到从库
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 -ddocker ps docker exec -it rs1id /bin/bashmongo> 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({});exitdocker exec -it rs2id /bin/bashmongomyset:SECONDARY> rs.status();myset:SECONDARY> rs.slaveOk();myset:SECONDARY> show databases;myset:SECONDARY> use test;myset:SECONDARY> db.userinfo.find({});exitdocker exec -it rs3id /bin/bashmongomyset:SECONDARY> rs.slaveOk();myset:SECONDARY> show databases;myset:SECONDARY> use test;myset:SECONDARY> db.userinfo.find({});
测试: 强行停止主库 rs1
,检查从库是否能分配并切换到主库 ,在继续强行停止分配后的主库 rs2
docker stop rs1iddocker exec -it rs2id /bin/bashdocker stop rs2iddocker exec -it rs3id /bin/bashdocker-compose rm
结论:
当主节点 rs1
挂了,会有从节点过来替代原有主库的位置,但是当仅剩最后一个从库时,无法切换为主库。
当主节点 rs1
重新启动恢复后,只会立马变为从库,不再是主库。除非等到现在的主库挂了,才有可能重新回到主库的位置。
问题: 当主节点 rs1
挂了,会有从节点过来替代原有主库的位置,但是具体是哪一个从库没有办法控制。所以我们需要添加一个冲裁
来解决这个问题。
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 -ddocker ps docker exec -it masterid /bin/bashmongo> 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({});exitdocker exec -it slaveid /bin/bashnewset:SECONDARY> res.slaveOk();newset:SECONDARY> use test;newset:SECONDARY> db.userinfo.find({});exitdocker exec -it arbiterid /bin/bashnewset:ARBITER> res.slaveOk();newset:ARBITER> show databases;newset:ARBITER> db.userinfo.find({});
注意: 当存在 arbiter
节点 (只是仲裁,并不存储数据)
读到这里,这篇“MongoDB如何高效读写海量数据”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。
--结束END--
本文标题: MongoDB如何高效读写海量数据
本文链接: https://lsjlt.com/news/322764.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0