MongoDB是一个可移植的NoSQL数据库,它几乎可以运行在所有的操作系统之上,从而实现了跨平台性。尽管在不同的操作系统上虽然略有差别,但是从整体上来看,MongoDB在不同的操作系统平台上的体系架构(如数据逻辑结构和数据存储等等)都是一样的。一个运行着的MongoDB数据库就可以看成是一个MongoDB服务器,该服务器由MongoDB数据库实例和MongoDB数据库组成。在一般情况下,一个MongoDB数据库实例可以对应有多个MongoDB数据库,这一点与MySQL数据库类似。如下图所示。
视频讲解如下:
与MySQL和Oracle等关系型数据库类似,MongoDB也是通过逻辑存储结构来管理物理存储结构。
一、逻辑存储结构
MongoDB的逻辑存储结构是一种层次结构,主要包括了三个部分,即:数据库(Database)、集合(Collection,也可以叫做表)和文档(Document,也可以叫做记录)。MongoDB的逻辑存储结构是面向用户使用的,使用mongoshell或者应用程序操作MongoDB时,主要就是操作的MongoDB逻辑存储结构。数据库(Database)、集合(Collection)和文档(Document)的层次结构。如下图所示。
二、物理存储结构
MongoDB的默认数据目录是/daba/db,它将负责存储所有的MongoDB的数据文件。在MongoDB内部,每个数据库都包含一个.ns文件、多个数据文件和日志文件。这些文件会随着MongoDB数据量的增加变的越来越多,具体如下:
- 命名空间文件:后缀是ns,默认大小是16M。
- 数据文件:后缀是0、1、2......,而.0文件16M,.1文件32M,往后则翻倍,最大值为2G,这样可以让小数据库不浪费太多的空间,大数据库能够使用磁盘上连续的空间。通过牺牲空间,换取时间。
由于从3.2版本开始,MongoDB使用了WiredTiger的存储引擎。因此无法直接在/daba/db目录下看到命名空间文件和数据文件。但使用MMAPv1的存储引擎就可以很清楚地看到这些类型的文件。
- 日志文件:MongoDB会根据不同的日志信息将日志存储在不同的位置上。下表列举了MongoDB存储日志的相关存储位置信息。