这是一个没有套路的前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~
主页: oliver尹的主页
格言: 跌倒了爬起来就好~
来个关注吧,点个赞吧,谢谢
MongoDB的简介与体系结构
一、简介
MongoDB 是一个 基于分布式文件存储的数据库。它具有开源、高性能、无模式等优点,由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。属于NoSQL的一种(NoSQL数据库不仅仅只有MongoDB,还有redis等),非关系型数据库我们通常认为就是NoSQL类型的数据库。
MongoDB支持的数据结构类似于JSON,叫做 BSON,所以它既可以存储比较复杂的数据类型,又相当的灵活;
二、数据库类型
首先,得了解什么是 关系型数据 和 非关系型数据库
2.1 关系型数据库
是指采用了 关系模型 来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为 二维表格模型,而一个 关系型数据库就是由二维表及其之间的关系组成的一个数据组织。
2.2 非关系型数据库
NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是 超大规模 和 高并发 的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,特别是大数据应用难题。
NoSQL仅仅是一个概念,泛指非关系型的数据库,区别于关系数据库,它们不保证关系数据的ACID特性。NoSQL无须事先为要存储的数据建立字段,NoSQL是一项全新的数据库革命性运动,其拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
NoSQL有如下优点:易扩展,NoSQL数据库种类繁多,但是一个 共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间也在架构的层面上带来了可扩展的能力。大数据量,高性能,NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。
主要的优点有:易扩展,大数据量下高性能,灵活的数据模型,高可用
三、体系结构
MySQL和MongoDB对比
可以看的出,两者其实非常接近,再来看看专业术语
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库中的表/集合 |
row | document | 数据库的行/文档 |
column | fileld | 字段/域 |
index | index | 索引 |
table joins | 表链接,MongoDB不支持表链接 | |
嵌入文档 | MongoDB通过嵌入式文档替代多表链接 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
四、数据模型
MongoDB的 最小存储单位是文档,也就是document对象,文档document对象对应在关系型数据库中就是 行。数据在MongoDB中以BSON文档的格式存储在磁盘上;
BSON是一种 类似JSON格式的存储格式,简称:Binary-JSON,BSON和JSON一样,支持内嵌的文档对象和数据对象,但是BSON的数据格式比JSON更加丰富,比如Date类型和BinData类型;
数据类型 | 描述 | 举例 |
---|---|---|
字符串 | UTF-8字符串可表示为字符串类型的数据 | {“name”:“oliver”} |
对象id | 对象ID是问的12字节唯一id | |
布尔值 | true/false | {“name”:true} |
数组 | 值的集合或者列表 | {“name”:[‘oliver’,‘yin’]} |
32位整数 | 类型不支持,javascript没有区分整数和浮点数类型 | |
64位整数 | 类型不支持,javascript没有区分整数和浮点数类型 | |
64位浮点数 | shell中的数字就是这一种类型 | {“name”:18.5123,“age”:18} |
null | 空值或者未定义 | {“name”:null} |
undefined | 未定义 | {“name”:undefined} |
正则表达式 | 正则表达式 | {“name”:/oliver/i} |
代码 | 可以包含代码 | {“name”:function(){}} |
二进制数据 | 二进制数据可以由任意字节的串组成 | |
最大值和最小值 | BSON的一个特殊类型 | |
五、小结
归根结底,MongoDB的主要特点有以下几点:
- 高性能:MongoDB提供高性能的数据持久性,由于其非关联数据结构,对大数据量的存储天然友好;
- 高可用性:MongoDB的肤质工具称作为副本集,它提供自动故障转移和数据冗余;
- 高扩展性:MongoDB提供了水平可扩展性作为其核心功能的一部分,分片数据分布在一组集群机器上,从3.4开始,支持基于片键创建数据区域;
- 丰富的查询支持:支持丰富的查询语言,支持读和写操作,比如数据聚合,文本吧搜索和地理空间查询;
并且,MongoDB的体系结构和关系型数据库非常接近,主要分为:Database,collection,document,其中document也就是我们称为文档的东西是其最小的存储单位;
MongoDB的数据结构称之为BSON,它的形态非常接近于JSON,只是说它的类型在JSON的基础上更多而已;