mongodb应用心得

server/2024/12/19 11:11:03/

mongodb_0">基于springboot做mysql业务基础数据分析到mongodb文档库

索引分析

查看当前集合索引:db.collection.getIndexes()
explain 方法查看是如何执行的:db.users.find({ name: “John” }).sort({ age: -1 }).explain(“executionStats”)
参数指标:
queryPlanner:显示查询优化器的选择。
serverInfo:提供服务器信息。
executionStats:提供详细的执行统计信息。
关键字段:
winningPlan:显示实际使用的查询计划。
rejectedPlans:显示被拒绝的查询计划。
nReturned:返回的文档数量。
executionTimeMillis:查询执行时间(毫秒)。
totalKeysExamined:扫描的索引键数量。
totalDocsExamined:扫描的文档数量。
nYields:查询过程中让步的次数。
stage:查询执行的不同阶段。

{"queryPlanner": {"plannerVersion": 1,"namespace": "mydatabase.users","indexFilterSet": false,"parsedQuery": {"name": {"$eq": "John"}},"winningPlan": {"stage": "FETCH","inputStage": {"stage": "IXSCAN","keyPattern": {"name": 1,"age": -1},"indexName": "idx_name_age","isMultiKey": false,"multiKeyPaths": {"name": [],"age": []},"isUnique": false,"isSparse": false,"isPartial": false,"indexVersion": 2,"direction": "forward","indexBounds": {"name": ["[\"John\", \"John\"]"],"age": ["[MaxKey, MinKey]"]}}},"rejectedPlans": []},"executionStats": {"executionSuccess": true,"nReturned": 10,"executionTimeMillis": 1,"totalKeysExamined": 10,"totalDocsExamined": 10,"executionStages": {"stage": "FETCH","nReturned": 10,"executionTimeMillisEstimate": 0,"works": 11,"advanced": 10,"needTime": 0,"needYield": 0,"saveState": 0,"restoreState": 0,"isEOF": 1,"invalidates": 0,"docsExamined": 10,"alreadyHasObj": 0,"inputStage": {"stage": "IXSCAN","nReturned": 10,"executionTimeMillisEstimate": 0,"works": 11,"advanced": 10,"needTime": 0,"needYield": 0,"saveState": 0,"restoreState": 0,"isEOF": 1,"invalidates": 0,"keyPattern": {"name": 1,"age": -1},"indexName": "idx_name_age","isMultiKey": false,"multiKeyPaths": {"name": [],"age": []},"isUnique": false,"isSparse": false,"isPartial": false,"indexVersion": 2,"direction": "forward","indexBounds": {"name": ["[\"John\", \"John\"]"],"age": ["[MaxKey, MinKey]"]},"keysExamined": 10,"dupsTested": 0,"dupsDropped": 0,"seenInvalidated": 0}}},"serverInfo": {"host": "localhost","port": 27017,"version": "4.4.6","gitVersion": "72e66213c2c3eab37d9358d5e78ad7f5c1d0d0d7"},"ok": 1
}关键分析:
winningPlan.stage: FETCH 表示查询从索引中获取文档。
winningPlan.inputStage.stage: IXSCAN 表示使用了索引扫描。
winningPlan.inputStage.indexName: idx_name_age 表示使用的索引名称。
executionStats.totalKeysExamined: 10 表示扫描了10个索引键。
executionStats.totalDocsExamined: 10 表示扫描了10个文档。
executionStats.executionTimeMillis: 1 表示查询执行时间为1毫秒。
indexStats 命令:indexStats 命令可以提供关于索引使用情况的统计信息,帮助你识别哪些索引被频繁使用,哪些索引几乎未被使用db.users.aggregate([{ $indexStats: {} }])[{"name": "_id_","key": {"_id": 1},"host": "localhost:27017","accesses": {"ops": 1000,"since": ISODate("2023-10-01T00:00:00Z")}},{"name": "idx_name_age","key": {"name": 1,"age": -1},"host": "localhost:27017","accesses": {"ops": 500,"since": ISODate("2023-10-01T00:00:00Z")}}
]
关键分析:
name: 索引名称。
key: 索引的键模式。
accesses.ops: 自上次重启以来对该索引的访问次数。
accesses.since: 上次重启的时间。
db.collection.stats()stats 方法提供集合的统计信息,包括索引的大小和使用情况。
{"ns": "mydatabase.users","size": 1048576,"count": 1000,"avgObjSize": 1048,"storageSize": 2097152,"capped": false,"nindexes": 2,"indexSizes": {"_id_": 26112,"idx_name_age": 26112},"totalIndexSize": 52224,"indexBuilds": {},"ok": 1
}
关键点分析
size: 集合的总大小。
count: 文档数量。
avgObjSize: 平均文档大小。
storageSize: 存储大小。
nindexes: 索引数量。
indexSizes: 每个索引的大小。
totalIndexSize: 所有索引的总大小。

mongodb分析步奏
分析步骤:

  1. 查看现有索引: db.collection.getIndexes() 使用 explain 方法:
  2. db.collection.find({ query }).explain(“executionStats”) 使用
  3. indexStats 命令: db.collection.aggregate([{ $indexStats: {} }])
  4. 使用 db.currentOp() 监控当前操作: db.currentOp() 使用 mongostat 和
  5. mongotop 监控工具: mongostat、mongotop 使用 db.collection.validate()
  6. 验证集合完整性: db.collection.validate() 使用 db.collection.stats()
  7. 获取集合统计信息: db.collection.stats() 使用 db.collection.dataSize()
  8. 获取数据大小: db.collection.dataSize() 使用
  9. db.collection.totalIndexSize()
    10.获取索引总大小: db.collection.totalIndexSize()
重建索引

重建集合中所有索引
db.集合名.reIndex()
删除指定索引:db.users.dropIndex(“indexName”)
重建指定索引:db.users.dropIndex(“idx_name”)

创建索引

1表示升序,-1表示降序
单字段索引
db.users.createIndex({ name: 1 })
复合索引
db.users.createIndex({ name: 1, age: -1 })


http://www.ppmy.cn/server/151426.html

相关文章

在 Ubuntu 下通过 Docker 部署 Cloudflared Tunnel 服务器

Cloudflared 是 Cloudflare 提供的一个命令行工具,用于创建安全的隧道,连接本地服务器与 Cloudflare 的网络。通过 Cloudflared Tunnel,可以轻松实现安全的远程访问,保护应用程序和服务免受 DDoS 攻击。Docker 则是一个强大的容器…

使用xpath规则进行提取数据并存储

下载lxml !pip install lxmlimport requests headers{"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36" } url"https://movie.douban.com/chart" respon…

复习打卡Linux篇

目录 1. Linux常用操作命令 2. vim编辑器 3. 用户权限 4. Linux系统信息查看 1. Linux常用操作命令 基础操作: 命令说明history查看历史执行命令ls查看指定目录下内容ls -a查看所有文件 包括隐藏文件ls -l ll查看文件详细信息,包括权限类型时间大小…

基于单片机的智能灯光控制系统

摘要 现在的大部分的大学,都是采用了一种“绿色”的教学方式,再加上现在的大学生缺乏环保意识,所以在学校里很多的教室,在白天的时候灯都会打开,这是一种极大的浪费,而且随时都有可能看到,这是…

【自适应】postcss-pxtorem适配Web端页面

在进行页面开发时,自适应设计是一个关键的考虑因素。为了实现这一点,postcss-pxtorem是一个非常有用的工具,它可以将CSS中的px单位转换为rem单位,从而实现基于根元素字体大小的自适应布局。下面介绍一下在项目中如何引入并配置pos…

[OpenGL] Transform feedback 介绍以及使用示例

一、简介 本文介绍了 OpenGL 中 Transform Feedback 方法的基本概念和代码示例。 二、Transform Feedback 介绍 1. Transform Feedback 简介 根据 OpenGL-wiki,Transform Feedback 是捕获由顶点处理步骤(vertex shader 和 geometry shader&#xff0…

游戏引擎学习第48天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们正在进行碰撞检测的工作,昨天我们几乎完成了一部分代码。由于一些原因,昨天的直播结束时未能完成所有内容。今天我们将继续进行,首先回顾一下之前的进展。我们需要让角色能够正确地与…

Latex中表格添加底部文本注释并调整对齐

如何实现从第一个表到第三个表的转换, 其中主要涉及到两点: (1)底部脚注与表格自动对齐并缩进换行 (2)表格自适应页面宽度 底部脚注的对齐与换行缩进需要用到 \usepackage{threeparttable} \usepackage{…