【MongoDB系列】-MongoDB详解(一文让你明白什么是MongoDB)

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 【MongoDB系列】-MongoDB详解(一文让你明白什么是MongoDB)
  • MongoDB简介
    MongoDB 是一个开源的、跨平台的、面向文档的、基于分布式文件存储的数据库系统,MongoDB 是由 C++ 语言开发,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。在高负载的情况下,通过添加更多的节点,可以保证服务器性能。
    MongoDB常常被归类为NoSQL数据库系统,也是当前NoSQL数据库的一种。
  • MongoDB特点
  1. 高可用:MongoDB提供复制工具(副本集),支持自动故障转移,数据冗余,副本集一组相同数据集合的MongoDB实例,提供数据高可用的冗余数据。
  2. 高性能:MongoDB提供数据持久化方式,包含对嵌入式数据模型的支持,支持数据索引,并且索引可以包含文档及其数组的键
  3. 水平拓展:MongoDB提供分片来完成数据库水平上的扩展。分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程。分片也称为分区(partitioning)。将数据分散到不同的机器上,实现对数据的分布式存储,到达存储海量数据,负载更多请求。
  4. 支持多种存储引擎:MongoDB支持多个存储引擎:WiredTiger存储引擎、MMAPv1存储引擎、InMemory内存存储引擎。另外,MongoDB提供可插拔的存储引擎API供第三方开发自己的存储引擎。
  5. 丰富的查询语言:MongoDB提供丰富的查询语言以支持读写操作及其数据的聚会、文本搜索和地理信息查询。
  • MongoDB体系结构MongoDB是一个实例,由多个数据库(Database)组成;一个数据库,由多个集合(Collection)组成;一个集合,又由多个文档(Document)组成。结构关系如下图MongoDB名词解释:
  1. 实例:由后台进程及其高速缓存组成,负责维护和访问数据库数据
  2. 数据库(Database):一个MongoDB实例可以创建多个数据库,需要注意不同的数据库存放在不同的文件中。
    MongoDB中有三个特殊的数据库:admin、local(本地数据库,永远不可以复制,且一台服务器上的所有本地集合都可以放在这个数据库中)、config(用于分片设置、保存分片信息)。
  3. 集合(Collection):集合可以看做是关系型数据库中的表,不同的是关系型数据库中的表存放的是表数据,但 Collection 存放的是文档。需要注意的是:集合是“动态模式”的,对于文档的格式没有要求,所以十分自由。
  • MongoDB常用术语与SQL类比
编号 MongoDB术语/概念 SQL术语/概念 说明
1 database database 数据库
2 collection table 数据库/集合
3 document row 数据记录行/文档
4 field column 数据字段/域
5 index index 索引
6 primary key primary key 主键
7 Embedded Documents Table join 表链接

  • MongoDB 数据存储结构
    MongoDB的默认数据目录是/data/db,它负责存储所有的MongoDB的数据文件。在MongoDB内部,每个数据库包含一个*.ns文件和一些数据文件,而且这些数据文件会随着数据量的增加而变得越来越多。
    MongoDB 内部有预分配空间的机制,每个预分配的文件都用 0 进行填充,由于有了这个机制,MongoDB 始终保持额外的空间和空余的数据文件,从而有效避免了由于数据暴增而带来的磁盘压力过大的问题。
    数据库的每张表都对应一个命名空间,每个索引也有对应的命名空间。这些命名空间的元数据都集中在在 *.ns 文件中。
  • MongoDB体系结构详细说明
编号 名称 说明
1 mongod 数据库服务
2 mongos 分片集群部署中,数据和查询的路由服务
3 mongo shell客户端
4 mongoimport / mongoexport 导入导出工具
5 mongodump / mongorestore 备份恢复工具
6 mongooplog 拉取并重放oplog的工具
7 mongostat、mongotop、mongosniff 监控工具
8 mongofiles GridFS的命令行操作工具
9 mongoperf 性能测试工具-(当前版本只能测试I/O)
10 bsondump 查看bson文件的工具

  • MongoDB数据库文件类型MongoDB的数据库文件主要有3种:
  1. journal 日志文件
  2. namespace 表名文件
  3. data 数据及索引文件
  • 日志文件
    MongoDB的日志文件只是用来在系统出现宕机时候恢复尚未来得及同步到硬盘的内存数据。日志文件会存放在一个分开的目录下面。启动时候MongoDB会自动预先创建3个每个为1G的日志文件(初始为空)。除非你真的有持续海量数据并发写入,一般来说3个G已经足够。
  • 命名文件 dbname.ns
    用来存储整个数据库的集合以及索引的名字。这个文件不大,默认16M,可以存储24000个集合或者索引名以及那些集合和索引在数据文件中得具体位置。通过这个文件MongoDB可以知道从哪里去开始寻找或插入集合的数据或者索引数据。这个值可以通过参数调整至2G。
  • 数据文件 dbname.0, dbname.1,… dbname.n
    MongoDB的数据以及索引都存放在一个或者多个MongoDB数据文件里。第一个数据文件会以“数据库名.0”命名,如 my-db.0。这个文件默认大小是64M,在接近用完这个64M之前,MongoDB 会提前生成下一个数据文件如my-db.1。数据文件的大小会2倍递增。第二个数据文件的大小为128M,第三个为256M。一直到了2G以后就会停止,一直按这个2G这个大小增加新的文件。
    当然MongoDB还会生成一些临时文件如 _tmp 和 mongod.lock等, 不过他们跟我们的讨论都没有太大相关性
  • 数据文件结构MongoDB把所存储的BSON文档的数据和B树索引组织到逻辑容器“Extent”里面。Extent特性:
  • 一个文件可以有多个Extent。
  • 每一个Extent只会包含一个集合的数据或者索引。
  • 同一个集合的数据或索引可以分布在多个Extent内。
  • 同一个Extent不会又有数据又有索引。
  • 每一个Extent存放多个Record,每个记录包含一个记录头及MongoDB的BSON文档,以及一些额外的padding空间。Padding是MongoDB在插入记录时额外分配一些未用空间。这样设计的目的是在文件变大的时候不至于把文档迁移到别处。记录头以整个记录的大小开始,包括该记录自己的位置以及前一个记录和后一个记录的位置。
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
2月前
|
存储 NoSQL MongoDB
day03—MongoDB基础
day03—MongoDB基础
50 0
|
7月前
|
存储 NoSQL MongoDB
06-MongoDB入门
06-MongoDB入门
|
8月前
|
存储 NoSQL 关系型数据库
什么时候选择MongoDB
什么时候选择MongoDB
65 2
|
9月前
|
存储 SQL NoSQL
mongoDB(二)
mongoDB
69 0
|
9月前
|
消息中间件 分布式计算 NoSQL
MongoDB适用场景
MongoDB适用场景
|
存储 NoSQL 安全
MongoDB入门
学习使用
144 0
|
存储 SQL NoSQL
mongoDB-基础
不能言而无信 今天就先把这个MongoDB 补了
180 0
mongoDB-基础
|
存储 JSON 分布式计算
MongoDB完整教程
什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。 主要特点 MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。
396 0
|
存储 SQL 监控
MongoDB初学者介绍:MongoDB
课程总结MongoDB是面向文档的NoSQL数据库,用于大量数据存储。通过此课程的学习,您将了解如何访问Mongodb及其重要功能,例如索引,正则表达式,分片数据等。我应该知道些什么?此课程是为初学者设计的。
1202 0
|
存储 缓存 NoSQL
初探MongoDB
MongoDB 日志 存储引擎
1253 0