MongoDB是一个基于分布式文件存储的数据库,由
C++
编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
一、介绍
MongoDB是一个基于分布式文件存储的数据库,由C++
编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。它是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。MongoDB由MongoDB Inc.
(当时是10gen
团队)于2007年10月开发,2009年2月首度推出,现以服务器端公共许可(SSPL)分发。
适用场景
- 主要解决大量数据的访问效率问题,减少mysql压力。
- MongoDB内建了多种数据分片的特性,可以很好的适应大数据量的需求。内建的Sharding分片特性避免系统在数据增长的过程中遇到性能瓶颈。
- 复杂数据结构,以多种不同查询条件去查询同一份数据。
- MongoDB的BSON数据格式非常适合文档化格式的存储及查询;支持丰富的查询表达式,可轻易查询文档中内嵌的对象和数组及子文档(聚合查询)。
- 非事务并且关联性集合不强的都可以使用
MongoDB4.0+
支持跨Collection
事务,MongoDB4.2+
支持跨Shard
事务
- 无多文档事务性需求及复杂关联检索。
- 业务快速迭代,需求频繁变动业务。
- 数据模型不固定,存储格式灵活场景。
- 单集群读写并发过大无法支撑业务增长。
- 期望5个9的数据库高可用场景。
二、规范
数据库设计规范
- 【强制】数据库命名规范:
db_xxxx
- 【强制】数据库名全部小写,禁止使用任何
_
以外的特殊字符,禁止使用数字打头的库名,如123_abc
- 数据库最终以文件夹的形式存在,使用特殊字符或其它不规范的命名方式会导致命名混乱
- 【强制】数据库名称最多为64个字符
- 【强制】在创建新的数据库前应尽量评估该库的体积、QPS等,提前与DBA讨论是应该新建一个库还是专门为该库创建一个新的集群
- 【强制】数据库命名规范:
集合设计规范
- 【强制】集合名全部小写,禁止使用任何
_
以外的特殊字符,禁止使用数字打头的集合名,如123_abc
,禁止以system开头命名,system是系统集合前缀 - 【强制】集合名称最多为64字符
- 【建议】一个库中写入较大的集合会影响其它集合的读写性能,如果业务比较繁忙的集合在一个DB中,建议最多80个集合,同时也要考虑磁盘I/O的性能
- 【建议】如果评估单集合数据量较大,可以将一个大表拆分为多个小表,然后将每一个小表存放在独立的库中或者sharding分表
- 【建议】MongoDB的集合拥有
自动清理过期数据
的功能,只需在该集合中文档的时间字段增加一个TTL索引即可实现该功能,但需要注意的是该字段的类型则必须是mongoDate()
,一定要结合实际业务设计是否需要 - 【建议】设计轮询集合—集合是否设计为Capped限制集,一定要结合实际业务设计是否需要
- 【强制】集合名全部小写,禁止使用任何
文档设计规范
索引设计规范
API使用规范
连接规范