博客
关于我
MongoDB开发规范与数据建模
阅读量:796 次
发布时间: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 Order By实现原理分析和Filesort优化
查看>>
mysql problems
查看>>
mysql replace first,MySQL中处理各种重复的一些方法
查看>>
MySQL replace函数替换字符串语句的用法(mysql字符串替换)
查看>>
mysql replace用法
查看>>
Mysql Row_Format 参数讲解
查看>>
mysql select as 多个_MySQL 中 根据关键字查询多个字段
查看>>
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql server has gone away
查看>>
mysql skip-grant-tables_MySQL root用户忘记密码怎么办?修改密码方法:skip-grant-tables
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL slow_query_log慢查询日志配置详解
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
MySQL sql_mode=only_full_group_by问题解决办法
查看>>
MYSQL sql语句针对数据记录时间范围查询的效率对比
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql sysbench测试安装及命令
查看>>
mysql Timestamp时间隔了8小时
查看>>
mysql tinyint 1 boolean,MySQL tinyint to boolean
查看>>