博客
关于我
MongoDB开发规范与数据建模
阅读量:797 次
发布时间:2023-02-09

本文共 1279 字,大约阅读时间需要 4 分钟。

MongoDB开发规范与数据建模指南

MongoDB开发规范

命名原则

数据库名和集合名应使用小写字符或统一大小写,避免超过64个字符。建议统一使用驼峰命名或下划线命名。

集合设计

  • 嵌套模式:适用于一对一关系且数据量较小时,能提升读写性能并保证原子性。
  • 引用模式:适用于复杂关系或未来可能演进的场景,确保数据独立性。

文档设计

  • 避免大文档:单个文档不得超过64MB。
  • 嵌入数据控制:嵌入字段需有上限,确保内存使用效率。
  • 字段命名优化:字段名控制在32字符以内,减少存储开销。

索引设计

  • 索引使用:必要时使用索引加速查询,单集合不超过10个索引。
  • 避免无效索引:定期清理不必要的索引,减少内存占用。
  • 优化原则:遵循覆盖索引和前缀匹配,使用explain()分析性能。

分片设计

  • 分片策略:对快速增长或高压业务表考虑分片,确保均衡分布。
  • 数据量控制:单分片集数据量不超过2TB,避免广播查询。
  • 索引与分片兼容:确保唯一索引覆盖分片,减少冲突风险。

升级设计

  • 数据兼容性:支持旧版本数据,新增或修改需评审,保持数据字典更新。
  • 数据清理:应用升级前检查并清理冗余数据。

数据一致性

  • 写入 concern:非关键业务用writeConcern: 1,关键业务用writeConcern: majority
  • 更新操作:使用updatefindAndUpdate时,使用upset: true需唯一索引。
  • 连接管理:避免短连接,使用官方驱动的连接池,控制连接数不超过200。

批量化API

  • 批量写入:使用Bulk Write,建议使用无序批次更新。

事务管理

  • 单文档事务优先:保证原子性,多文档事务控制在60秒以内。
  • 读写分离:条件允许下优化primary节点压力,节点读取优先从secondaries。

数据隔离

  • 数据存储:配置项、历史数据存入不同数据库,微服务使用独立数据库,避免垮库访问。

维护与规划

  • 数据字典:保持更新,提前规划数据容量,确保系统稳定性。

MongoDB数据建模

嵌入式文档 一对一关系模型

  • 示例:客户和地址的嵌入式关系,减少查询次数。
  • 优化示例:将地址数据嵌入客户文档,提升查询效率。

子集模式

  • 优化示例:将电影文档拆分为基本信息和详细信息,减少一次查询的数据量。

嵌入式文档 一对多关系模型

  • 示例:客户与多个地址的嵌入式关系,避免冗余查询。
  • 优化示例:将地址引用存入客户文档,提升查询效率。

文档引用 一对多关系模型

  • 优化示例:将出版商信息存入单独集合,避免数据重复。

物联网时序数据建模

数据存储方案

  • 每个事件独立文档:适合简单需求,但数据量增长快。
  • 每分钟平均值:优化写入和查询性能,但需要频繁更新。
  • 每分钟秒级记录:适合精确分析,但增加了迭代次数。
  • 每小时秒级记录:优化存储和查询,减少冗余数据。

优化建议

  • 选择合适方案:根据业务需求选择合适的存储策略,理论分析为基础,需结合实际测试。
  • 设计平衡:避免极端方案,选择读写性能平衡的方案。

通过以上开发规范和数据建模方案,可以有效提升MongoDB的性能和系统稳定性,适应各种业务需求。

转载地址:http://lnffk.baihongyu.com/

你可能感兴趣的文章
Mark Mind:下一代思维导图编辑器
查看>>
Markdown —— 背景色
查看>>
MaterialForm对tab页进行隐藏
查看>>
materialTabControl1_SelectedIndexChanged的使用
查看>>
matlab中APP介绍-ChatGPT4o作答
查看>>
matlab图的连通性算法,matlab判别图的连通性.doc
查看>>
MBA中的企业金融课程涉及什么内容
查看>>
MD5的算法(C)
查看>>
Meikade开源项目常见问题解决方案
查看>>
Member var and Static var.
查看>>
memcached的LRU删除机制
查看>>
memcached缓存服务器的安装
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>
memcache与memcached的区别
查看>>
MemCache在win7上的可视化配置以及Nodejs/Net应用
查看>>
memcache编译安装(cygwin环境)
查看>>
memset初始化高维数组为-1/0
查看>>