目录
应用场景
- MongoDB主要用于大量的数据读写,关系型数据库最怕的就是大量的数据读写,因为会有磁盘的IO 操作。
- 比如可以用MongoDB存储一些仪器上面的数据,这些仪器可能每秒就会产生成千上万条数据。
- 还可以用MongoDB存储一些爬虫的数据。
- 所以只要遇到海量的数据要进行读写,就可以用MongoDB来进行存储。
数据结构
- MongoDB将数据存储为一个文档,数据结构由键值对组成。
- MongoDB采用了BSON存储文档数据。
- BSON类似于JSON格式,但是在进行数据存储的时候是以二进制的形式进行存储。
- BSON就是Binary JSON,相对于JSON格式多了Date类型和二进制数组。
Database/Collection/Document
- Database是数据库服务,类似于关系型数据库中的数据库。
- Collection是集合,类似于关系型数据库中的表。
- Document是文档,类似于关系型数据库中某张表的单条数据。
- 所以每个Database可以对应有多个Collection,每个Collection可以对应有多个Document,每个 Document都可以是Binary JSON格式,并且每个Document的Binary JSON格式有可能都不 一样。
为什么读写快
- MongoDB的数据首先是写入内存的,所以写入的操作会很快。
- 但是内存的空间是有限的,所以MongoDB会定时的进行刷盘。
- MongoDB如果读取磁盘数据的话,会存在一个寻道的时间,性能就会变低。
主外键/事物
- MongoDB没有主外键,所以MongoDB不支持关联查询。但是可以通过数据冗余的方式来解决主外键 的问题。
- MongoDB 4.0的版本就开始支持事务。如果通过集群的方式来实现事务,那必须是主库。
集群
- MongoDB的集群是一个主库,多个从库。主库挂了之后,从库会随机选择一个作为主库,之前的主库 重新启动之后会变为从库,跟Redis数据库基于主从复制的哨兵模式比较像。
- MongoDB的集群中会包含一个仲裁节点。仲裁节点不储存数据,如果主库挂了,仲裁节点会从多个从 库里面选择一个作为主库。
索引
- MongoDB的普通索引是可以存储重复的值。
- MongoDB的唯一索引不可以存储重复的值,但是可以为NULL。
- MongoDB的主键不可以存储重复的值,也不可为NULL。
- 创建索引的时候最好创建唯一索引,保证该字段的值是唯一的。