0%

MongoDB使用规范

MongoDB是一个基于分布式文件存储的数据库,由C++编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。

一、介绍

      MongoDB是一个基于分布式文件存储的数据库,由C++编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。它是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。MongoDB由MongoDB Inc.(当时是10gen团队)于2007年10月开发,2009年2月首度推出,现以服务器端公共许可(SSPL)分发。

适用场景

  1. 主要解决大量数据的访问效率问题,减少mysql压力。
    • MongoDB内建了多种数据分片的特性,可以很好的适应大数据量的需求。内建的Sharding分片特性避免系统在数据增长的过程中遇到性能瓶颈。
  2. 复杂数据结构,以多种不同查询条件去查询同一份数据。
    • MongoDB的BSON数据格式非常适合文档化格式的存储及查询;支持丰富的查询表达式,可轻易查询文档中内嵌的对象和数组及子文档(聚合查询)。
  3. 非事务并且关联性集合不强的都可以使用
    • MongoDB4.0+支持跨Collection事务,MongoDB4.2+支持跨Shard事务
  4. 无多文档事务性需求及复杂关联检索。
  5. 业务快速迭代,需求频繁变动业务。
  6. 数据模型不固定,存储格式灵活场景。
  7. 单集群读写并发过大无法支撑业务增长。
  8. 期望5个9的数据库高可用场景。

二、规范

  1. 数据库设计规范

    • 【强制】数据库命名规范:db_xxxx
    • 【强制】数据库名全部小写,禁止使用任何_以外的特殊字符,禁止使用数字打头的库名,如123_abc
      • 数据库最终以文件夹的形式存在,使用特殊字符或其它不规范的命名方式会导致命名混乱
    • 【强制】数据库名称最多为64个字符
    • 【强制】在创建新的数据库前应尽量评估该库的体积、QPS等,提前与DBA讨论是应该新建一个库还是专门为该库创建一个新的集群
  2. 集合设计规范

    • 【强制】集合名全部小写,禁止使用任何_以外的特殊字符,禁止使用数字打头的集合名,如123_abc,禁止以system开头命名,system是系统集合前缀
    • 【强制】集合名称最多为64字符
    • 【建议】一个库中写入较大的集合会影响其它集合的读写性能,如果业务比较繁忙的集合在一个DB中,建议最多80个集合,同时也要考虑磁盘I/O的性能
    • 【建议】如果评估单集合数据量较大,可以将一个大表拆分为多个小表,然后将每一个小表存放在独立的库中或者sharding分表
    • 【建议】MongoDB的集合拥有自动清理过期数据的功能,只需在该集合中文档的时间字段增加一个TTL索引即可实现该功能,但需要注意的是该字段的类型则必须是mongoDate(),一定要结合实际业务设计是否需要
    • 【建议】设计轮询集合—集合是否设计为Capped限制集,一定要结合实际业务设计是否需要
  3. 文档设计规范

  4. 索引设计规范

  5. API使用规范

  6. 连接规范

三、参考

  1. 参考一