首页 > 数据库 >mongoDB​二

mongoDB​二

时间:2023-10-15 23:32:36浏览次数:38  
标签:mongo -- mongoDB shard 索引 0.0 root

MongoDB中的索引

索引就是为了加速查询的,MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧。下面是创建索引的命令:

  1. 创建索引:db.集合名称.ensureIndex({"name":1})
  1. 1 代表索引升序存储 -1 代表索引降序存储
  2. _id 默认自动创建索引
  3. 注意:
  1. 该索引被创建后,基于name和age的查询将会用到该索引
  2. 或者是基于name的查询也会用到该索引
  3. 但是只是基于age的查询将不会用到该复合索引。
  4. 如果想用到复合索引,必须在查询条件中包含复合索引中的前N个索引列。然而如果查询条件中的键值顺序和复合索引中的创建顺序不一致的话,MongoDB可以智能的帮助我们调整该顺序,以便使复合索引可以为查询所用。
  5. 如:db.t_user.find({"age": 30, "name": "stephen"})
    对于上面示例中的查询条件,MongoDB在检索之前将会动态的调整查询条件文档的顺序,以使该查询可以用到刚刚创建的复合索引。
  1. 总结:
  1. 创建索引指定索引名称:db.集合名称.ensureIndex({"name":1},{name:"name_index"})
  2. 查看索引是否创建成功:db.集合名称.getIndexes()
  3. 删除索引的命令:db.集合名称.dropIndex({"name":1});
  4. 创建复合索引:db.集合名称.ensureIndex({"name":1, "age":-1,bir:1})
  5. 创建唯一索引:db.t_user.ensureIndex({"name":1},{"unique":true})注意: 在缺省情况下创建的索引均不是唯一索引。一旦创建唯一索引,如果再次插入name重复的文档时,MongoDB将报错,以提示插入重复键 (exception: E11000 duplicate key error index: zpark.t_user.$name_1 dup key: { : \"xiaohei\" })
  6. 重建索引:db.集合名称.reIndex();

mongoDB中的主从复制(4.0版本废弃)

主从复制是mongoDB最常用的复制方式,这种方式非常灵活,可用于备份,故障恢复和扩展等.

  1. 搭建主从复制
  1. 准备三个机器一个主机两个备机mongod --port 27017 --dbpath /root/data/master/ --bind_ip 0.0.0.0 --master --oplogSize 50
    mongod --port 27018 --dbpath /root/data/slave1 --bind_ip 0.0.0.0 --slave --source 172.16.19.137:27017 --only baizhi –autoresync
    mongod --dbpath /root/data/slave2 --port 27019 --bind_ip 0.0.0.0 --slave --source 172.16.19.137:27017 --only baizhi --autoresync --slavedelay 30
  1. 主从复制的选项--master 主节点
    --slave 从节点
    --source arg 为从节点时从哪个主节点复制<server:port>
    --only arg 为从节点时只复制主节点的那个库
    --slavedelay arg 从节点延迟多长时间复制主节点 秒
    --autoresync 从机数据不是最新是自动重新同步数据
    --oplogSize 主节点的操作日志单位是M
  2. 查看集群状态:

rs.help();

rs.slaveOk(); //开启从机查询

MongoDB中的副本集

MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组成。主从集群和副本集之间最明显的区别就是副本集没有固定的”主节点”,

整个集群会选举一个主节点,当主节点不能工作时自动变更到其他节点.

  1. 配置主机名
  1. vi /etc/hosts文件加入如下配置
  1. 当前主机地址
  2. use admin
  3. 执行如下命令 var config = {
    _id:"myreplace",
    members:[
    {_id:0,host:"mongo:27017"},
    {_id:1,host:"mongo:27018"},
    {_id:2,host:"mongo:27019"}]
    }
    rs.initiate(config);//初始化配置
  1. 准备三个存放数据的目录并启动三个节点mongod --port 27017 --dbpath /root/repl1 --bind_ip 0.0.0.0 --replSet myreplace/mongo:27018
    mongod --port 27018 --dbpath /root/repl2 --bind_ip 0.0.0.0 --replSet myreplace/mongo:27019
    mongod --port 27019 --dbpath /root/repl3 --bind_ip 0.0.0.0 --replSet myreplace/mongo:27017
    注意: --replSet 副本集 myreplace 副本集名称/集群中其他节点的主机和端口
  2. 连接任意一台mongo
  3. 设置客户端临时访问数据:rs.slaveOk();
  1. 搭建副本集

Springboot 操作副本集

spring.data.mongodb.uri=mongodb://127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019/ems(库名)?replcaSet=spock(副本集名称)

Mongodb中的分片

  1. 分片(sharding)分片目的是通过分片能够增加更多机器来应对不断的增加负载和数据,还不影响应用.
  2. 分片(sharding)是指将数据拆分,将其分散存在不同机器的过程,有时也用分区(partitioning)来表示这个概念,将数据分散在不同的机器上,不需要功能强大的大型计算机就能存储更多的数据,处理更大的负载.
    MongoDB支持自动分片,可以摆脱手动分片的管理困扰,集群自动切分数据做负载均衡.MongoDB分片的基本思想就是将集合拆分成多个块,这些快分散在若干个片里,每个片只负责总数据的一部分,应用程序不必知道哪些片对应哪些数据,甚至不需要知道数据拆分了,所以在分片之前会运行一个路由进程,mongos进程,这个路由器知道所有的数据存放位置,应用只需要直接与mongos交互即可,mongos自动将请求转到相应的片上获取数据.从应用角度看分不分片没有什么区别.
  3. 什么时候分片
  1. 机器磁盘不够用了
  2. 单个的mongo已经不能满足写数据的性能需要了
  3. 分片结构的端口如下Shard Server 1:27020
    Shard Server 2:27021
    Shard Server 3:27022
    Shard Server 4:27023
    Config Server :27100
    Config Server :27101
    Config Server :27102
    Route Process:40000
  4. 创建数据目录mkdir -p /root/shard/s0
    mkdir -p /root/shard/s1
    mkdir -p /root/shard/s2
    mkdir -p /root/shard/s3
    mkdir -p /root/shard/config1
    mkdir -p /root/shard/config2
    mkdir -p /root/shard/config3
  5. 创建数据目录并启动四台shard机器mongod --port 27020 --dbpath /root/shard/s0 --bind_ip 0.0.0.0 --shardsvr
    mongod --port 27021 --dbpath /root/shard/s1 --bind_ip 0.0.0.0 --shardsvr
    mongod --port 27022 --dbpath /root/shard/s2 --bind_ip 0.0.0.0 --shardsvr
    mongod --port 27023 --dbpath /root/shard/s3 --bind_ip 0.0.0.0 --shardsvr
  6. 创建config数据目录启动配置机器mongod --port 27100 --dbpath /root/shard/config1 --bind_ip 0.0.0.0 --replSet config/mongo:27101 --configsvr
    mongod --port 27101 --dbpath /root/shard/config2 --bind_ip 0.0.0.0 --replSet config/mongo:27102 --configsvr
    mongod --port 27102 --dbpath /root/shard/config3 --bind_ip 0.0.0.0 --replSet config/mongo:27100 --configsvr
  7. 初始化config的配置服务器副本集
  1. 登录任意config的server节点中使用 use admin
  2. config在admin中执行var config = {
    _id:"config",
    configsvr: true,
    members:[
    {_id:0,host:"mongo:27100"},
    {_id:1,host:"mongo:27101"},
    {_id:2,host:"mongo:27102"}]
    }
  3. 初始化副本集配置rs.initiate(config);
  4. mongos --port 40000 --configdb config/mongo:27100,mongo:27101,mongo:27102 --bind_ip 0.0.0.0注意: config为上面的副本集名称
  5. use admin
  6. 添加分片节点: db.runCommand({ addshard:"mongo:27020","allowLocal":true });
    db.runCommand({ addshard:"mongo:27021","allowLocal":true });
    db.runCommand({ addshard:"mongo:27022","allowLocal":true });
    db.runCommand({ addshard:"mongo:27023","allowLocal":true });
  1. 启动路由
  2. 客户端登陆到mongos中 mongo –port 40000
  3. 设置分片的库:db.runCommand({ enablesharding:"baizhi" });
  4. 设置那个库中那个集合以及片键信息:
  1. mongoDB的分片架构图
  • Shard:用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障
  • Config Server:mongod实例,存储了整个 ClusterMetadata。
  • Query Routers:前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
  1. 片键设置分片时需要在集合中选一个键,用该键的值作为拆分数据的依据,这个片键称之为(shard key)
    注意: 在真正的生产环境中,片键的选取很重要,片键的选取要一定要数据散列均匀
  2. 搭建分片集群

db.runCommand({ shardcollection: "baizhi.users", key: { _id:1}})

db.runCommand({ shardcollection: "baizhi.users", key: { _id: "hashed"}})


标签:mongo,--,mongoDB,shard,索引,0.0,root
From: https://blog.51cto.com/lizp/7874040

相关文章

  • MongoDB一
    MongoDB的引言MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。Nosql技术门类redis内存型mongodb文档型MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他......
  • 轻松掌握组件启动之MongoDB:快速入门、Linux安装和Docker配置指南
    引言我们将继续深入研究组件启动专题。在之前的文章中,我们已经详细介绍了Redis的各种配置使用方法,为读者提供了全面的指导。然而,今天我们将转向另一个备受关注的数据库——MongoDB。MongoDB是一种流行的NoSQL数据库,具有强大的灵活性和可扩展性。在这篇文章中,我们将探索MongoDB的......
  • 【技术积累】《MongoDB实战》笔记(1)
    《MongoDB实战》笔记第一章为现代Web而生的数据库特性mongodb适合做水平扩展的数据库。mongodb把文档组织成集合,无schema。索引mongodb的二级索引是B树实现。每个集合最多可以创建64个索引,副本集mongodb通过副本集(replicationset)的结构提供了复制功能。副本集有一个主......
  • MongoDB 4.2 需关闭FlowControl流控机制
    MongoDB4.2版本引入了流量控制特性,用于保持副本集多数提交延迟不超过指定的最大值,从而确保数据的一致性和可靠性。如果复制延迟达到"flowControlTargetLagSeconds":10(秒),流量控制机制就会开始限制主节点上的写入操作。db.adminCommand({getParameter:1,"flowControlTargetL......
  • MongoDB 中的索引分析
    MongoDB的索引前言MongoDB使用B树还是B+树索引单键索引创建单键索引使用expireAfterSeconds创建TTL索引复合索引最左匹配原则ESR规则如何使用排序条件多键索引创建多键索引局限性哈希索引注意事项创建索引总结参考MongoDB的索引......
  • mongodb 安装测试
    昨天完成了mongodb的安装和测试    ......
  • MongoDB Node.js Driver and MongoClient All In One
    MongoDBNode.jsDriverandMongoClientAllInOneThenextgenerationNode.jsdriverforMongoDB$npmimongodb#OR$npmi-Smongodb#OR$npminstallmongodb--savehttps://mongodb.github.io/node-mongodb-native/index.htmlhttps://www.mongodb.com......
  • MongoDB可视化管理工具-MongoDB Compass【转】
    一、引言在使用MongoDB过程中,如果单单依靠命令行操作MongoDB数据库,效率不高而且查看不方便。因此MongoDB官网提供的一个可视化管理工具,叫MongoDBCompass,它集创建数据库、管理集合和文档、运行临时查询、评估和优化查询、性能图表、构建地理查询等功能为一体,很方便。二、......
  • MongoDB常用查询
    1.数据库数据说明#集合:school#文档:stu#结合字段:id,学号、姓名、电话、性别、年龄、学历、备注#初始化20条数据useschoolfor(varnum=1;num<=20;num++){db.stu.insert({id:num,no:"SN"+num,name:"name"+num,tel:"111......
  • MongoDB基础知识
    1.简介MongoDB官方文档菜鸟教程1、NoSQL(NotOnlySQL),不仅仅是SQL,主要是指非关系型数据库,是对不同与传统的关系型数据库的数据管理系统的统称2、NoSQL用于超大规模数据的存储,这些类型的数据存储吧需要固定的模式,无需多余的操作就可以横向扩展1.2NoSQL和RDBMS的区分......