千家信息网

MongoDB如何高效读写海量数据

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本文小编为大家详细介绍"MongoDB如何高效读写海量数据",内容详细,步骤清晰,细节处理妥当,希望这篇"MongoDB如何高效读写海量数据"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
千家信息网最后更新 2026年11月04日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.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

缺点: 当主库挂了,需要手动切换到从库

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 -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 挂了,会有从节点过来替代原有主库的位置,但是具体是哪一个从库没有办法控制。所以我们需要添加一个冲裁 来解决这个问题。

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 -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如何高效读写海量数据"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

节点 数据 海量 位置 文章 切换 内容 数据库 时代 问题 高性能 仲裁 分配 妥当 传感器 分布式 办法 只是 地图 地理 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技有限公司 广州为想互联网科技有限公司 互联网科技网 科技互联网企业 美国互联网科技巨头监管 互联网科技资迅 安徽鑫晟辉互联网科技 科技创新互联网企业 江苏南京365互联网科技 创业天下互联网科技有限公司 受益于互联网科技的高速发展 千方科技属于互联网企业吗 互联网科技产业特征 华夏恒生互联网科技013171 玉溪新华互联网科技好不好 长沙茂晟互联网科技有限公司 小米互联网科技园入驻 科技互联网行业投资研究 好易买互联网科技 互联网科技大会大佬 润盈互联网科技 贵州叶脉互联网科技有限公司所属行业 互联网对科技的发展 互联网保险科技创业 科技类公司包括互联网吗 山东子淼互联网科技有限公司 锡山区互联网智能科技产品供应 广州千川互联网科技有限公司 银川新华互联网科技学校是国营吗 互联网科技自媒体灵感
0