MongoDB脚本:集合中字段数据大小的分位数统计
2023-06-13 09:14:46 时间
日常开发中,有时需要了解数据分布的一些特点,比如这个colllection里documents的平均大小、全部大小等,来调整程序的设计。 对于系统中已经存在大量数据的情况,这种提前分析数据分布模式的工作套路(最佳实践)可以帮助我们有的放矢的进行设计,避免不必要的过度设计或者进行更细致的设计。
如果想获得某个collection相关的各种存储统计信息,可以使用 collStats。参见:https://www.mongodb.com/docs/v4.4/reference/operator/aggregation/collStats/#mongodb-pipeline-pipe.-collStats。
如果想获取总计、平均等简单的统计信息,可以参考这里:https://www.mongodb.com/docs/manual/core/aggregation-pipeline/#std-label-aggregation-pipeline。
下面的命令可以显示 COLLECTION 中满足条件status=’active’,字段FIELD_A, FIELD_B的数据大小的quantile analysis。实际使用时用自己的集合名、字段名以及过滤条件进行替换即可。
//最大的Top10和百分比分布。
db.COLLECTION.aggregate([
{ $match: { "status": 'active' } },
{ $project: { _id: 1, FIELD_A: 1, FIELD_B: 1} },
{ $project: { documentSize: { $sum: { $bsonSize: "$$ROOT" } } } },
{ $sort: { documentSize: 1 } },
{ $group: { '_id': null, 'value': { '$push': '$documentSize' } } },
{ $project: { _id: 0,
"Top1": { $arrayElemAt: ["$value", { $floor: { $add: [-1, { $size: "$value" }] } } ] },
"Top2": { $arrayElemAt: ["$value", { $floor: { $add: [-2, { $size: "$value" }] } } ] },
"Top3": { $arrayElemAt: ["$value", { $floor: { $add: [-4, { $size: "$value" }] } } ] },
"Top4": { $arrayElemAt: ["$value", { $floor: { $add: [-5, { $size: "$value" }] } } ] },
"Top5": { $arrayElemAt: ["$value", { $floor: { $add: [-6, { $size: "$value" }] } } ] },
"Top6": { $arrayElemAt: ["$value", { $floor: { $add: [-7, { $size: "$value" }] } } ] },
"Top7": { $arrayElemAt: ["$value", { $floor: { $add: [-7, { $size: "$value" }] } } ] },
"Top8": { $arrayElemAt: ["$value", { $floor: { $add: [-8, { $size: "$value" }] } } ] },
"Top9": { $arrayElemAt: ["$value", { $floor: { $add: [-9, { $size: "$value" }] } } ] },
"Top10": { $arrayElemAt: ["$value", { $floor: { $add: [-10, { $size: "$value" }] } } ] },
"99-9%": { $arrayElemAt: ["$value", { $floor: { $multiply: [0.999, { $size: "$value" }] } } ] },
"99%": { $arrayElemAt: ["$value", { $floor: { $multiply: [0.99, { $size: "$value" }] } } ] },
"95%": { $arrayElemAt: ["$value", { $floor: { $multiply: [0.95, { $size: "$value" }] } } ] },
"90%": { $arrayElemAt: ["$value", { $floor: { $multiply: [0.90, { $size: "$value" }] } } ] },
"50%": { $arrayElemAt: ["$value", { $floor: { $multiply: [0.50, { $size: "$value" }] } } ] },
"25%": { $arrayElemAt: ["$value", { $floor: { $multiply: [0.25, { $size: "$value" }] } } ] },
} },
]);
相关文章
- MongoDB 高性能最佳实践: 事务,读取关心程度与写入关心程度
- MongoDB 常用命令
- 开心档-软件开发入门之MongoDB 高级索引
- 教你如何处理mongodb出现id重复问题的解决办法
- MongoDB操作指南:创建集合(mongodb创建集合)
- 使用C语言连接MongoDB数据库(c使用mongodb)
- 深入探索MongoDB集群测试技术(mongodb集群测试)
- MongoDB复制集合:简单而有效的数据复制技术(mongodb复制集合)
- MongoDB:孩子集合管理技巧(mongodb子集合)
- 取数据MongoDB:如何获取数据(mongodb怎么读)
- MongoDB: 使用集合关联实现全面数据模型(mongodb集合关联)
- MongoDB如何构建索引优化查询性能(mongodb加索引)
- MongoDB管理:明智的职位选择(mongodb管理员)
- MongoDB零碎数据迁移指南(mongodb迁移)
- 探索MongoDB:技术原理及应用(mongodb技术原理)
- MongoDB缓存数据的简易实现(mongodb做缓存)
- 学习MongoDB:快速掌握使用方法(mongodb怎么用)
- 使用MongoDB实现高效图片存储与管理(mongodb图片存储)
- 探索MongoDB:揭秘文档数据库的奥秘(mongodb的文档)
- MongoDB实现跨机房的数据同步(mongodb跨机房)
- 持久化MongoDB:用多线程实现数据持久化(mongodb多线程)
- 如何使用MongoDB建立数据集合?(mongodb建集合)
- MongoDB: 如何使用命令创建数据库和集合(mongodb创建命令)
- 使用MongoDB导入TXT文件: 简单步骤详解(mongodb导入txt)
- Mongodb集合字段的重要性与优化技巧(mongodb集合字段)
- 如何在MongoDB中处理集合字段?(mongodb集合字段)
- 使用 MongoDB 内嵌查询优化数据检索(mongodb内嵌查询)
- Mongodb异步: 改善数据读写效率的有效方法(mongodb异步)
- Mongodb多集合,数据库存储好帮手(mongodb多集合)
- MongoDB区间查询技术实践(mongodb 区间查询)
- MongoDB集合字段应用及其优势(mongodb集合字段)
- 掌握MongoDB中查询字段的技巧(mongodb查询字段)
- MongoDB源码福利:快来下载吧!(mongodb源代码下载)
- php操作mongoDB实例分析