2 优化
约 1937 字大约 6 分钟
2025-06-23
查询索引
db.collection.getIndexes()
查询对应集合的索引情况
创建索引
- keys : 字段值
- options : 可选项,设置索引的选项
db.collection.createIndex(keys,options)
创建索引时mongodb会自动根据索引值创建索引名称
选项 | 类型 | 作用 |
---|---|---|
background | Boolean | 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加“background"可选参数。“background"默认值为false. |
unique | Boolean | 建立的索引是否唯一。指定为true创建唯一索引。默认值为false. |
name | string | 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。 |
dropDups | Boolean | 3.0+版本已废弃。在建立唯一索引时是否删除重复记录,指定true创建唯一索引l。默认值为 fallse. |
sparse | Boolean | 对文档中不存在的字段数据不启用索引:这个参数需要特别注意,如sparseBoolean果设置为true的话,在索引字段中不会查询出不包含对应字段的文档。默认值为 fallse. |
expireAfterSeconds | integer | 指定一个以秒为单位的数值,完成TTL设定,设定集合的生存时间。 |
v | index version | 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。 |
weights | document | 索引权重值,数值在1到99,999之间,表示该索引相对于其他索引字段的得分权重。 |
default_language | string | 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。默认为英语 |
language_override | string | 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language. |
索引需要设置正序或倒序:将articleid设为索引以倒序排列
db.comment.createIndex({articleid: -1})
复合索引
在创建索引时可以指定多个字段
db.comment.createIndex({userid: 1, articleid: -1})
删除索引
- index : 指定要删除的索引|。可以通过索引|名称或索引规范文档指定索引。若要删除文本索引.请指定索引名称。
db.collection.dropIndex(index)
删除所有索引 删除所有用户创建的索引,mongodb自动创建的(_id)索引除外
db.collection.dropIndexes()
根据创建时的条件删(完全匹配的)
db.comment.dropIndex({articleid: -1})
根据索引名称删
db.comment.dropIndex("userid_1_articleid_-1")
查看集合索引的大小
db.collections.totalIndexSize()
传入非0会返回每个索引的大小
索引的使用
执行计划
分析查询性能(AnalyzeQueryPerformance)通常使用执行计划(解释计划、ExplainPlan)来查看查询的情况,如查询耗费的时间、是否基于索引查询等。 那么,通常,我们想知道,建立的索引是否有效,效果如何,都需要通过执行计划查看。
- options : 可选项
db.collection.find(query,options).explain(options)
副本集
简介
MongoDB 中的副本集(Replica Set)是一组维护相同数据集的 mongod 服务。 副本集可提供冗余和高可用性,是所有生产部署的基础。
也可以说,副本集类似于有自动故障恢复功能的主从集群。通俗的讲就是用_多台机器进行同一数据的异步同步_,从而使多台机器拥有同一数据的多个副本,并且当主库当掉时在不需要用户干预的情况下自动切换其他备份服务器做主库。而且还可以利用副本服务器做只读服务器,实现读写分离,提高负载。
冗余和数据可用性
复制提供冗余并提高数据可用性。 通过在不同数据库服务器上提供多个数据副本,复制可提供一定级别的容错功能,以防止丢失单个数据库服务器。
在某些情况下,复制可以提供增加的读取性能,因为客户端可以将读取操作发送到不同的服务上, 在不同数据中心维护数据副本可以增加分布式应用程序的数据位置和可用性。 还可以为专用目的维护其他副本,例如灾难恢复,报告或备份。
MongoDB 中的复制
副本集是一组维护相同数据集的 mongod 实例。 副本集包含多个数据承载节点和可选的一个仲裁节点。 在承载数据的节点中,一个且仅一个成员被视为主节点,而其他节点被视为次要(从)节点。
主节点接收所有写操作。 副本集只能有一个主要能够确认具有 {w:"most"}
写入关注的写入; 虽然在某些情况下,另一个 mongod 实例可能暂时认为自己也是主要的。主要记录其操作日志中的数据集的所有 更改,即 oplog。
辅助(副本)节点复制主节点的oplog并将操作应用于其数据集,以使辅助节点的数据集反映主节点的数据 集。 如果主要人员不在,则符合条件的中学将举行选举以选出新的主要人员。
主从复制和副本集区别
主从集群和副本集最大的区别就是副本集没有固定的”主节点”;整个集群会选出一个”主节点”,当其挂掉后,又在剩下的从节点中选中其他节点为主节点,副本集总有一个活跃点 (主、primary) 和一个或多个备份节点 (从、secondary)
副本集的三个角色
副本集有两种类型三种角色
两种类型:
- 主节点(Primary)类型:数据操作的主要连接点,可读写
- 次要(辅助、从)节点(Secondary)类型:数据冗余备份节点,可以读或选举
三种角色:
- 主要成员(Primary):主要接收所有写操作。就是主节点
- 副本成员(Replicate):从主节点通过复制操作以维护相同的数据集,即备份数据,不可写操作,但可以读操作(但需要配置)。是默认的一种从节点类型
- 仲裁者(Arbiter):不保留任何数据的副本,只具有投票选举作用。当然也可以将仲裁服务器维护为副本集的一部分,即副本成员同时也可以是仲裁者。也是一种从节点类型。
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination:file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/D:/mongodb/replica_sets/myrs_27017/log/mongod.1og"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
logAppend:true
storage:
#mongod实例存储其数据的目录。设置仅适用于mongod。
dbpath: "/D:/mongodb/replica_sets/myrs_27017/data/db"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled:true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork:true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/D:/mongodb/replica_sets/myrs_27017/log/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll:true
#服务实例绑定的IP
bindIp: localhost,192.168.0.2
#bindIp
#绑定的端口
port: 27017
replication:
#副本集的名称
replsetName:myrs
视图
视图是只读的
创建视图
db.createView("名称","数据来源的集合",聚合的数据)
查询视图
db.collection.find()
视图上的 find()
方法不支持如下projection操作:
$
$elemMatch
$slice
$meta
不能重命名视图
删除视图
db.collection.drop()
贡献者
版权所有
版权归属:PinkDopeyBug