文章目录
- MongoDB基本使用
- Nosql简介
- 什么是NoSQL
- 为什么使用NoSQL
- RDBMS vs NoSQL
- NoSQL
- NoSQL的优缺点
- 缺点
- MongoDB基础
- 什么是MongoDB
- 存储结构
- 主要特点
- 基本概念
- 和传统数据库对比
- 集合
- 命令规范
- 文档
- key的命令规范
- 注意事项
- MongoDB的数据类型
- BSON
- 支持的数据类型
MongoDB基本使用
Nosql简介
NoSQL(NoSQL = Not Only SQL ),意即”不仅仅是SQL”。
在现代的计算系统上每天网络上都会产生庞大的数据量, 这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理, 1970年 E.F.Codd’s提出的关系模型的论文 “A relational model of data for large shared data banks”,这使得数据建模和应用程序编程更加简单。
通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。
NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨,NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。
什么是NoSQL
NoSQL,指的是非关系型的数据库,NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
NoSQL用于超大规模数据的存储,(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据),这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
为什么使用NoSQL
今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。
用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加,我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL 数据库的发展却能很好的处理这些大的数据。
RDBMS vs NoSQL
RDBMS
- 高度组织化结构化数据
- 结构化查询语言(SQL)
- 数据和关系都存储在单独的表中。
- 数据操纵语言,数据定义语言
- 严格的一致性
- 基础事务
NoSQL
- 代表着不仅仅是SQL
- 没有声明性查询语言
- 没有预定义的模式
- 键 - 值对存储,列存储,文档存储,图形数据库
- 最终一致性,而非ACID(原子性、一致性、隔离性、持久性)属性
- 非结构化和不可预知的数据
NoSQL的优缺点
- 优点
- 高可扩展性
- 分布式计算
- 低成本
- 架构的灵活性,半结构化数据
- 没有复杂的关系
缺点
- 没有标准化
- 有限的查询功能(到目前为止)
- 最终一致是不直观的程序
MongoDB基础
什么是MongoDB
MongoDB 是由C++语言编写的,是一个基于分布式文档存储的开源数据库系统。
- 在高负载的情况下,添加更多的节点,可以保证服务器性能。
- MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
存储结构
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,MongoDB 文档类似于 JSON
对象,字段值可以包含其他文档,数组及文档数组。
主要特点
- 非关系型数据库,基于 Document data model(文档数据模型)
- MongoDB以 BSON (BinaryJSON) 格式存储数据,类似于 JSON 数据形式
- 关系型数据库使用 table (tables of rows)形式存储数据,而MongoDB使用 collections (collections of documents)
- 支持 临时查询(ad hoc queries): 系统不用提前定义可以接收的查询类型
- 索引通过 B-tree 数据结构, 3.2版本的WiredTiger 支持 log-structured merge-trees(LSM)
- 支持索引和次级索引(secondary indexes): 次级索引是指文档或row有一个 主键(primary key)作为索引,同时允许文档或row内部还拥有一个索引,提升查询的效率,这也是MongoDB比较大的一个特点
基本概念
和传统数据库对比
不管我们学习什么数据库都应该学习其中的基础概念,在mongodb中基本的概念是文档、集合、数据库,下面我们分别介绍,下表将帮助您更容易理解Mongo中的一些概念:
对比项 | mongo | 数据库 |
---|---|---|
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | DBRef,$.lookup | 表连接 |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
集合
相当于关系数据库的表,不过没有数据结构的定义。它由多个document组成。
命令规范
因为是无结构定义的,所以你可以把任何document存入一个collection里。每个collection用一个名字标识,需要注意以下几点:
- 名字不允许是空字符串""
- 名字不能包含\0字符,因为它表示名字的结束
- 不能创建以system.开头的
文档
mongoDB的基本单位,相当于关系数据库中的行,它是一组有序的key/value键值对,使用json格式,
如:{“foo” : 3, “greeting”: “Hello, world!”}。
key的命令规范
key是个UTF-8字符串,以下几点是需要注意的地方:
- 不能包含\0字符(null字符),它用于标识key的结束
- .和 字符在 m a n g o d b 中有特殊含义,如 字符在mangodb中有特殊含义,如 字符在mangodb中有特殊含义,如被用于修饰符($inc表示更新修饰符),应该考虑保留,以免被驱动解析
- 以_开始的key也应该保留,比如_id是mangodb中的关键字
注意事项
- 在mangodb中key是不能重复的
- value 是弱类型,甚至可以嵌入一个document
- key/value键值对在mangodb中是有序的 {key: {key1:“1”, key2:“2”}}
- mangodb是类型和大小写敏感的,如{“foo” : 3}和{“foo” : “3”}是两个不同的document,{“foo” : 3}和{“Foo” : 3}
- 每个文档最大支持16M
- 文档字段是有序的
MongoDB的数据类型
BSON
BSON(Binary Serialized Document Format)是一种类JSON的二进制形式的存储格式,简称Binary
JSON
它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型,它支持下面数据类型。每个数据类型对应一个数字,在MongoDB中可以使用$type操作符查看相应的文档的BSON类型。
支持的数据类型
数据类型 | 描述 |
---|---|
String | 这是最常用的数据类型来存储数据。在MongoDB中的字符串必须是有效的UTF-8。 |
Integer | 这种类型是用来存储一个数值,整数可以是32位或64位,这取决于您的服务器。 |
Boolean | 此类型用于存储一个布尔值 (true/ false) 。 |
Double | 这种类型是用来存储浮点值。 |
Min/ Max keys | 这种类型被用来对BSON元素的最低和最高值比较。 |
Arrays | 使用此类型的数组或列表或多个值存储到一个键。 |
Timestamp | 时间戳。这可以方便记录时的文件已被修改或添加。 |
Object | 此数据类型用于嵌入式的文件。 |
Null | 这种类型是用来存储一个Null值。 |
Symbol | 此数据类型用于字符串相同,但它通常是保留给特定符号类型的语言使用。 |
Date | 此数据类型用于存储当前日期或时间的UNIX时间格式。可以指定自己的日期和时间,日期和年,月,日到创建对象。 |
Object ID | 此数据类型用于存储文档的ID。 |
Binary data | 此数据类型用于存储二进制数据。 |
Code | 此数据类型用于存储到文档中的JavaScript代码。 |
Regular expression | 此数据类型用于存储正则表达式 |