一日一技:如何找到 MongoDB 占用空间最大的集合?

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 一日一技:如何找到 MongoDB 占用空间最大的集合?

摄影:产品经理酒店早餐

我的 MongoDB 上面有很多库,每个库里面有很多集合。他们占用了太多的储存空间。现在我想找到占用空间最大的10个集合,应该如何操作?

如果要查看一个集合占用的硬盘空间,使用 Robo 3T 就能轻松实现:

红框中的storageSize就是这个集合在硬盘中占用的空间,单位是 Byte。且不说人眼难以区分13144064 Byte到底是130MB 还是1.3GB。光说这个 MongoDB 里面不同数据库总计有上百个集合,我们应该如何查询?

你可以试一试分别使用关键词query size of every collection on MongoDB with pymongo 或者 使用 Pymongo 查询 MongoDB 所有 collection 的大小

你会发现,你找不到答案。

而且,如果如果尝试写一些代码,你会发现在 Pymongo 里面,没有类似.stats()的方法,你甚至无法获取一个集合的大小,如下图所示:

这个时候应该怎么办呢?

实际上,我们使用 Pymongo 也可以直接执行 MongoDB 命令。那就是数据库对象的.command()方法。例如获取一个集合占用空间的大小,可以写为:

import pymongo
db = pymongo.MongoClient().Meituan
stats = db.command('collstats', 'id_place')

它返回的是一个字典,内容跟在 Robo 3T 执行.stats()的效果是一样的。如下图所示。

要获取占用硬盘的大小,只需要执行stats['storageSize']即可。

所以,我们可以使用如下代码来获取所有集合的大小并排序:

import pymongo
all_data = {}
conn = pymongo.MongoClient()
db_list = conn.database_names()
for db_name in db_list:
    db = conn[db_name]
    collections = db.collection_names()
    for collection_name in collections:
        storage = db.command('collstats', collection_name)['storageSize']
        all_data[f'{db_name}.{collection_name}'] = storage / 1024 / 1024  # 使用 MB 作为单位
usage = sorted(all_data.items(), key=lambda x: x[1], reverse=True)
print('占用空间最大的前10个集合:')
print(usage[:10])

运行效果如下图所示:

需要注意的是,由于我的 Jupyter 中使用的 PyMongo 版本比较老,所以列出数据库用到的是conn.database_names(),列出集合用到的是db.collection_names()。如果你的 PyMongo 版本比较新,那么你需要使用conn.list_database_names()db.list_collection_names

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
1月前
|
NoSQL MongoDB 数据库
MongoDB 删除集合
10月更文挑战第14天
27 1
|
18天前
|
缓存 NoSQL MongoDB
|
1月前
|
存储 NoSQL MongoDB
MongoDB 创建集合
10月更文挑战第13天
30 1
|
3月前
|
存储 NoSQL 数据管理
揭秘MongoDB时间序列集合:这个超级功能将如何彻底改变你的数据管理?
【8月更文挑战第8天】时间序列数据记录随时间变化的信息,在数据库管理中至关重要。MongoDB自4.0版起引入时间序列集合,专为这类数据优化存储与查询。通过问答形式介绍其特点:自动数据过期、高效存储机制及快速查询操作。创建时需指定时间字段及可选元数据字段。支持设置数据过期时间,采用粗粒度索引减少I/O操作。查询时可通过时间范围筛选数据,并利用聚合框架进行数据分析。随着实时分析需求的增长,时间序列集合的应用将更加广泛。
162 0
|
6月前
|
NoSQL 测试技术 定位技术
【MongoDB 专栏】MongoDB 的地理空间索引与位置查询
【5月更文挑战第10天】MongoDB 支持地理空间数据处理,提供2dsphere(球面)和2d(平面)索引,适用于地图导航、物流、社交网络等领域。通过创建索引,可加速位置查询,如查询范围、最近邻及地理空间聚合。案例包括地图应用、物流追踪和社交网络。注意数据准确性、索引优化和性能测试,以发挥其在地理空间处理中的潜力。学习此功能,为应用开发解锁更多可能性!
247 2
【MongoDB 专栏】MongoDB 的地理空间索引与位置查询
|
5月前
|
NoSQL 安全 MongoDB
精准数据清理:掌握 MongoDB 删除集合的方法与最佳实践
精准数据清理:掌握 MongoDB 删除集合的方法与最佳实践
193 0
|
5月前
|
存储 NoSQL MongoDB
MongoDB 集合创建指南:命名规范、索引优化和数据模型设计
MongoDB 集合创建指南:命名规范、索引优化和数据模型设计
110 0
|
NoSQL MongoDB 数据库
04 MongoDB - 集合操作
04 MongoDB - 集合操作
56 0
|
NoSQL MongoDB 数据库
MongoDB常用的操作(服务器、数据库、集合)
MongoDB常用的操作(服务器、数据库、集合)
2466 0
|
NoSQL MongoDB Cloud Native
【mongo 系列】mongodb 学习十一,MongoDB 分片集群之分片集合
MongoDB 中 分片集群有专门推荐的模式,例如 分片集合
150 0