博客
关于我
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/

你可能感兴趣的文章
mysql 不区分大小写
查看>>
mysql 两列互转
查看>>
MySQL 中开启二进制日志(Binlog)
查看>>
MySQL 中文问题
查看>>
MySQL 中日志的面试题总结
查看>>
mysql 中的all,5分钟了解MySQL5.7中union all用法的黑科技
查看>>
MySQL 中的外键检查设置:SET FOREIGN_KEY_CHECKS = 1
查看>>
Mysql 中的日期时间字符串查询
查看>>
mysql 中索引的问题
查看>>
MySQL 中锁的面试题总结
查看>>
MySQL 中随机抽样:order by rand limit 的替代方案
查看>>
MySQL 为什么需要两阶段提交?
查看>>
mysql 为某个字段的值加前缀、去掉前缀
查看>>
mysql 主从
查看>>
mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
查看>>
mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
查看>>
mysql 主从关系切换
查看>>
MYSQL 主从同步文档的大坑
查看>>
mysql 主键重复则覆盖_数据库主键不能重复
查看>>
MySQL 事务的面试题总结
查看>>