在数据存储中,最常见的三种存储方案是:在文件系统的文件中直接存储,关系数据库和NoSQL数据库。本篇文章讲的就是第三类:一种叫MongoDB的NoSQL数据库。
1,什么是NoSQL
NoSQL(not only SQL):由提供缺乏传统SQL关系数据库的严格限制模型的存储和检索技术组成。NoSQL背后的主要动机是简化设计,水平扩展,以及对数据的可用性进行更精细的控制。
NoSQL的思路是打破关系数据库的传统结构,并允许开发人员用更紧密契合了其系统数据流需求的方法实现模型。NoSQL数据库的实现方式可能永远无法用传统的关系数据库来构造。
有多种不同的NoSQL技术,包括HBase的列结构,Redis的键/值结构,以及Virtuoso的图状结构。
本篇文章介绍的是MongoDB和文档模型,MongoDB在为Web应用程序和服务实现后端存储方面具有极大的灵活性和可扩展性,此外,MongoDB是目前能够得到的最流行并拥有最好的支持的NoSQL数据库(额.. 好像Redis也用得越来越多了..加个之一)。
2,什么是MongoDB
MongoDB是这样一种NoSQL数据库,它基于的文档模型吧数据对象作为一个集合中单独的文档来存储。你可以使用MongoDB数据库来实现提供高性能,高可用性和自动扩展的数据存储。
2.1 理解集合
MongoDB通过使用集合将数据分组在一起。集合(collection)仅仅是一组具有相同或类似用途的文档。集合的行为很像传统的SQL数据库中的表。然而两者之间有一个很大的不同。在MongoDB中,集合不执行严格的模式;相反,如果需要的话,在同一个集合中的文档可以具有彼此略微不同的结构。这减少了把在文档中的条目分成若干不同的表的需要,而这在SQL实现中往往需要这样做。
2.2 了解文档
文档(document)是MongoDB数据库中单个数据实体的表示。集合由一个或多个相关的对象组成。MongoDB和SQL之间的主要区别是MongoDB文档与SQL的行存在很大的不同。行数据是非常平坦的,意味着行中的每一个值都有一个列。然而,在MongoDB中,文档可以包含嵌入的子文档,从而为应用程序提供更密切的内在数据模型。
事实上,在MongoDB数据库中,代表文档的记录被存储为BSON,这是JSON的一个轻量级的二进制形式。此外,MongoDB的字段/对应与JavaScript的属性/值对。这些字段/值对定义了存储在该文档中的值。这意味着,要把MongoDB的记录转换回你会在自己的Node.js应用程序中使用的JavaScript对象,几乎没有必要进行翻译。
例如,MongoDB的文档可以构造成如下这个样子,带有name,version,languages,admin和paths字段:
{ name:"xiaobaicai's document", version:1, language:["JavaScript","Html","css"], admin:{name:"xiaobai",password:"****"}, paths:{temp:"/tmp",project:"/opt/project",html:"/opt/project/html"} }
请注意,文档结构包含字段/属性,它们是字符串,整数,数组和对象,就像一个JavaScript对象的属性一样。下面的表1列出了在BSON文档中可以为字段值设置的不同数据类型。
字段名不能包含kong(null)字符,句点(.)或美元符号($)。此外,_id字段名是为对象的ID保留的。该_id字段是系统中的唯一的ID,它由以下几部分组成:
- 一个4字节的值,代表从纪元以来的秒数
- 一个3字节的机器标识符。
- 一个2字节的进程ID
- 一个3字节的计数器,从一个随机值开始
在MongoDB中,文档的最大大小为16MB。这可以防止导致RAM使用过量或对文件系统产生强烈冲击。虽然你可能永远不会接近这个数字,但在你需要设计包含文件数据的一些复杂的数据类型时,请牢记这个最大文件的大小。
3,MongoDB的数据类型
BSON数据格式在以二进制形式存储JavaScript对象时,提供了几种不同的类型供使用。这些类型尽可能与JavaScript的类型相匹配。了解这些类型是重要的,因为你可以真正地查询MongoDB,来发现具有某一类型的值的特定属性的对象。例如,你可以在数据库中查找时间戳是一个String对象的文档,或查询时间戳值是Data对象的文档。
MongoDB为每一种数据类型分配了从1到255的整数ID号,可使用它来按类型查询。表1显示了MongoDB支持的数据类型的列表,以及MongoDB用来辨别它们的编号。
类型 | 说明 | 编号 |
Double | 双精度类型 | 1 |
String | 字符串 | 2 |
Object | 对象 | 3 |
Array | 数组 | 4 |
Binary data | 二进制数据 | 5 |
Object id | 对象ID | 7 |
Boolean | 布尔值 | 8 |
Date | 日期 | 9 |
Null | 控制 | 10 |
Regular Expression | 正则表达式 | 11 |
JavaScript | JavaScript | 13 |
Symbol | 符号 | 14 |
JavaScript(with scope) | JavaScript(带作用域) | 15 |
32-bit integer | 32位整数 | 16 |
Timestamp | 时间戳 | 17 |
64-bit integer | 64位整数 | 18 |
Min Key | 最小键 | 255 |
Max Key | 最大键 | 127 |
在MongoDB中使用不同数据类型时,你需要知道的另一件事是它们比较的顺序。当比较不同BSON类型的值时,MongoDB使用下面的比较顺序,从最低到最高排列如下:
- 最小键(内部类型)
- 空值
- 数值
- 符号,字符串
- 对象
- 数组
- 二进制数据
- 对象ID
- 布尔值
- 日期,时间戳
- 正则表达式
- 最大键(内部类型)
关于MongoDB 更多内容的文章可以看: https://blog.csdn.net/qq_39263663/article/details/80377441