1-MongoDB - 初始MongoDB
关于NoSQL
NoSQL(Not Only SQL)泛指非关系型的数据库。
我们通过下表来简单了解NoSQL和SQL的区别:
SQL | NoSQL |
---|---|
SQL是关系数据库管理系统(RDBMS) | NoSQL是非关系数据库系统 |
SQL数据库需要预先开发一个架构,并且所有数据都根据该架构存储 | NoSQL数据库具有动态架构 |
在SQL中,数据以表的形式存储在数据库中 | 在NoSQL中,数据以对象、文档、图形、键值对等形式存储数据 |
SQL使用标准化SQL语法命令来管理数据 | NoSQL使用非标准化语句来管理数据 |
关于MongoDB
MongoDB 是由C++语言编写并基于分布式文件存储的开源数据库。
MongoDB 是一款介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的NOSQL数据库。它面向文档存储,而且安装和操作起来都比较简单和容易,而且它支持各种流行编程语言进行操作,如Python,Node.js,Java,C++,PHP,C#,Ruby等。
目前在大数据、内容管理、持续交付、移动应用、社交应用、用户数据管理、数据中心等领域皆有广泛被使用。
MongoDB的特点
MongoDB具有以下特点:
- 高性能,MongoDB提供高性能的数据持久化,尤其是支持嵌入式数据模型,减少数据库系统级别的I/O操作,并支持索引加速查询。
- 丰富的语言查询类型,MongoDB支持丰富的查询语言来支持读写操作,以及数据汇总、文本搜索和地理空间位置索引。
- 高可用性,MongoDB的复制工具,提供自动故障转移和数据冗余。
- 水平可扩展性,MongoDB提供了分片机制来提高其扩展性能。
- 支持多种存储引擎,WiredTiger存储引擎、MMAPv1存储引擎和InMemory存储引擎。
- 面向文档,我们知道,关系型数据库以表和记录行的形式存储数据,但是在MongoDB中,是以文档的形式存储数据。区别在于,文档要比数据表的行更加灵活。因为文档可以是多层次的,它(文档)鼓励你将属于一个逻辑实体的数据保存在同一个文档中,而不是散落在各个表的不同行中,这样查询效率很高,因为我们无需连接其他的表。
MongoDB是如何组织数据的
为了更好的理解MongoDB是如何组织数据的,我们可以通过逻辑设计物理设计两个方面来观察。
逻辑设计
我们可以把MongoDB与关系型数据做个客观对比:
Relational DB | MongoDB |
---|---|
数据库(database) | 库(database) |
表(tables) | 集合(collection) |
行(rows) | 文档(documents) |
列(columns) | 字段/键(fields) |
主键(primary key) | 对象ID(objectId) |
索引(index) | 索引(index) |
一个MongoDB实例(一个MongoDB进程)中,包含多个数据库,每个数据库中包含多个集合,每个集合中存储多个文档,每个文档中包含多个字段,且库与库之间、集合与集合之间、文档与文档之间都是是相互独立的。
那么你一定很好奇文档是如何存储的,这就要来介绍MongoDB的物理设计了。
物理设计
多个MongoDB实例可以组成一个复制集,用于提高数据的安全性;多个复制集又可以组成一个集群,用于横向扩展,在集群中,每个复制集可以理解为一个节点,不同的节点存储的数据不同。而文档是以bson的格式存储在集群的某个节点中。
那么什么是bson呢?MongoDB中的文档被设计为标准的json字符串,这样便于与编程语言进行通信和操作。但json也有其自身的缺陷,比如json结构过大,会导致数据遍历较慢。
后来有了bson作为MongoDB的物理存储结构,bson(Binary Serialized Document Format)是一种二进制形式的存储格式,可以理解为二进制形式的json,它和json一样支持文档对象和数据对象,同时它还支持Date和BinDate类型的数据。bson提高了json的遍历速度,在内部操作也更为简单。
MongoDB的版本选择
截至到本篇博客编写时,目前,MongoDB最新版本已经到了MongoDB4.4.3,但市场上的主流版本是3.4和3.6两个版本,所以,这里及以后所有的示例及配置都以3.6为主。
PS:至于小版本都无所谓了啊,比如3.6.12还是3.6.21都行!!!
that's all,see also: