MongoDB如何高效读写海量数据
本文小编为大家详细介绍“MongoDB如何高效读写海量数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“MongoDB如何高效读写海量数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
MongoDB简介常见应用场景高性能,易部署,易使用
分布式的日志收集: elk 单节点最多 32g , mongodb 越多越好
传感器(电子产品) --- 数据库 --- MongoDB
地理地图
网络爬虫
大数据时代的3V海量 Volume
多样 Variety
实时 Velocity
大数据库时代的3高高并发
高可扩
高性能
MongoDB集群1. 一主一从docker-compose.yml
version:'2'services:master:image:mongo:3.4volumes:-/data/mongodbml/master:/data/dbcommand:mongod--dbpath/data/db--masterslaver:image:mongo:3.4volumes:-/data/mongodbml/slaver:/data/dbcommand:mongod--dbpath/data/db--slave--sourcemaster:27017links:-master
注意:默认从库是不能读取,需要设置SlaveOk
的状态:
docker-composeup-ddockerpsdockerexec-itmasterid/bin/bashmongo>showdatabases;>usetest;>db.userinfo.insert({"name":"master"});>db.userinfo.find({});exitdockerexec-itslaveid/bin/bashmongo>showdatabases;>db.getMongo().setSlaveOk();>usetest;>db.userinfo.find({});docker-composerm
缺点:当主库挂了,需要手动切换到从库
2. 一主二从docker-compose.yml
version:'2'services:rs1:image:mongo:3.4volumes:-/data/mongodbtest/replset/rs1:/data/dbcommand:mongod--dbpath/data/db--replsetmysetrs2:image:mongo:3.4volumes:-/data/mongodbtest/replset/rs2:/data/dbcommand:mongod--dbpath/data/db--replsetmysetrs3:image:mongo:3.4volumes:-/data/mongodbtest/replset/rs3:/data/dbcommand:mongod--dbpath/data/db--replsetmyset
设置:安排rs1
进主节点,rs2
、rs3
进从节点。
docker-composeup-ddockerpsdockerexec-itrs1id/bin/bashmongo>rs.initiate()myset:SECONDARY>rs.add('rs2:27017');myset:PRIMARY>rs.add('rs3:27017');myset:PRIMARY>rs.conf()myset:PRIMARY>showdatabases;myset:PRIMARY>usetest;myset:PRIMARY>db.userinfo.insert({"name":"rs1"});myset:PRIMARY>db.userinfo.find({});exitdockerexec-itrs2id/bin/bashmongomyset:SECONDARY>rs.status();myset:SECONDARY>rs.slaveOk();myset:SECONDARY>showdatabases;myset:SECONDARY>usetest;myset:SECONDARY>db.userinfo.find({});exitdockerexec-itrs3id/bin/bashmongomyset:SECONDARY>rs.slaveOk();myset:SECONDARY>showdatabases;myset:SECONDARY>usetest;myset:SECONDARY>db.userinfo.find({});
测试:强行停止主库rs1
,检查从库是否能分配并切换到主库 ,在继续强行停止分配后的主库rs2
dockerstoprs1iddockerexec-itrs2id/bin/bashdockerstoprs2iddockerexec-itrs3id/bin/bashdocker-composerm
结论:
当主节点rs1
挂了,会有从节点过来替代原有主库的位置,但是当仅剩最后一个从库时,无法切换为主库。
当主节点rs1
重新启动恢复后,只会立马变为从库,不再是主库。除非等到现在的主库挂了,才有可能重新回到主库的位置。
问题:当主节点rs1
挂了,会有从节点过来替代原有主库的位置,但是具体是哪一个从库没有办法控制。所以我们需要添加一个冲裁
来解决这个问题。
docker-compose.yml
version:'2'services:master:image:mongo:3.4volumes:-/data/mongodbnode/replset/rs1:/data/dbcommand:mongod--dbpath/data/db--replsetnewset--oplogSize128slave:image:mongo:3.4volumes:-/data/mongodbnode/replset/rs2:/data/dbcommand:mongod--dbpath/data/db--replsetnewset--oplogSize128arbiter:image:mongo:3.4command:mongod--dbpath/data/db--replsetnewset--smallfiles--oplogSize128
配置:
docker-composeup-ddockerpsdockerexec-itmasterid/bin/bashmongo>rs.initiate()newset:SECONDARY>rs.add('slave:27017');newset:PRIMARY>rs.add('arbiter:27017',true);newset:PRIMARY>re.conf()newset:PRIMARY>showdatabases;newset:PRIMARY>usetest;newset:PRIMARY>db.userinfo.insert({"name":"master"});newset:PRIMARY>db.userinfo.find({});exitdockerexec-itslaveid/bin/bashnewset:SECONDARY>res.slaveOk();newset:SECONDARY>usetest;newset:SECONDARY>db.userinfo.find({});exitdockerexec-itarbiterid/bin/bashnewset:ARBITER>res.slaveOk();newset:ARBITER>showdatabases;newset:ARBITER>db.userinfo.find({});
注意:当存在arbiter
节点 (只是仲裁,并不存储数据)
读到这里,这篇“MongoDB如何高效读写海量数据”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。