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:

sql和nosql区别_SQL和NoSQL之间的区别 |关于NoSQL与SQL的区别

posted @ 2021-01-19 11:09  听雨危楼  阅读(161)  评论(0编辑  收藏  举报