1. MongoDB简介
MongoDB是一个NoSQL数据库系统,它是一种非关系型数据库,意味着它不像传统的关系型数据库SQL那样使用表和行存储数据。MongoDB使用"文档"模型存储数据,这些文档类似于JSON格式,因此非常适合存储动态、非结构化的数据。
2. MongoDB的数据文件结构
2.1 数据库
MongoDB的所有数据都存储在数据库中,每个数据库都包含多个集合(collection),每个集合包含多个文档(document)。数据库会生成对应的数据文件夹,一个数据库包括多个数据文件。
show dbs
mongo
use mydatabase
在这个例子中,我们通过show dbs
命令列出了MongoDB中所有的数据库。默认情况下,MongoDB有一些内置的数据库,包括admin、config和local。我们使用use mydatabase
命令创建了一个名为“mydatabase”的新数据库。
2.2 集合
集合是一组具有相同结构的MongoDB文档。一个文档在同一个集合中可以与其他文档不同,并且不需要定义表结构。与关系型数据库中的表非常相似。你可以通过以下方式创建一个新的集合:
db.createCollection("mycollection");
show collections
在这里,我们使用db.createCollection("mycollection")
命令来创建名为“mycollection”的新集合。我们使用show collections
命令列出了当前数据库中的所有集合。
2.3 文档
文档是MongoDB存储数据的基本单元,是一组键值对。这里的键是字符串,值可以是各种类型的数据。文档的结构可以随时修改。
db.mycollection.insertOne({
"name": "Alice",
"age": 25,
"hometown": "New York"
})
db.mycollection.insertOne({
"name": "Bob",
"age": 30,
"hometown": "San Francisco"
})
在这里,我们使用db.mycollection.insertOne()
命令向名为“mycollection”的集合中插入了两个文档。
3. MongoDB数据文件结构的组成部分
数据文件夹中包含两个重要的文件:mongod.lock和WiredTiger。mongod.lock是MongoDB实例本地文件,它包含了实例获得的锁定信息,WiredTiger是专门设计的存储引擎。
3.1 物理文件格式
在MongoDB中,每一个长期持久化的数据都属于集合中的一个文档,并被序列化为硬盘上的一个物理文件。
3.2 存储引擎
存储引擎是MongoDB的核心组成部分。存储引擎负责存储、检索和管理数据。
3.3 MongoDB数据文件结构的具体实现
在MongoDB中,每一个文档都是由 BSON 格式(Binary JSON)编码和解码,BSON是一种轻量级的、高效的数据交换格式,具有 CJSON(Canonical JSON)的所有特性,但是相比于 JSON 格式,BSON 拥有更加丰富的类型支持、更节省的空间以及更快的解析/写入性能。
MongoDB数据文件结构的物理组成包括:
Namespace
Header信息
文档数据
填充Byte
有关这些组成部分更详细的信息,请查看官方文档