1. NoSQL 简介

NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是 SQL"。

事务在英文中是 transaction,和现实世界中的交易很类似,它有如下四个特性:

1.1 关系型数据库遵循 ACID 规则

(1)A (Atomicity) 原子性

原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成 功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回 滚。

(2)C (Consistency) 一致性

一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改 变数据库原本的一致性约束。例如现有完整性约束 a+b=10,如果一个事务改变了 a,那 么必须得改变 b,使得事务结束后依然满足 a+b=10,否则事务失败。

(3)I (Isolation) 独立性

所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被 另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。

比如现有有个交易是从 A 账户转 100 元至 B 账户,在这个交易还未完成的情况下, 如果此时 B 查询自己的账户,是看不到新增加的 100 元的。

(4)D (Durability) 持久性

持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕 机也不会丢失。

1.2、什么是 NoSQL?

NoSQL,指的是非关系型的数据库。NoSQL 有时也称作 Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

NoSQL 用于超大规模数据的存储。(例如谷歌或 Facebook 每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩 展。

1.3 为什么使用 NoSQL ?

今天我们可以通过第三方平台(如:Google,Facebook 等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经 成倍的增加。我们如果要对这些用户数据进行挖掘,那 SQL 数据库已经不适合这些应用 了, NoSQL 数据库的发展也却能很好的处理这些大的数据。

1.4、RDBMS vs NoSQL

(1)RDBMS (关系数据库管理系统)
----高度组织化结构化数据
----结构化查询语言(SQL) (SQL)
----数据和关系都存储在单独的表中。
----数据操纵语言,数据定义语言
----严格的一致性
----基础事务

(2)NoSQL
----代表着不仅仅是 SQL
----没有声明性查询语言
----没有预定义的模式:键值对存储,列存储,文档存储,图形数据库
----最终一致性,而非 ACID 属性
----非结构化和不可预知的数据
----CAP 定理
----高性能,高可用性和可伸缩性

2. MongoDB简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

2.1、什么是 MongoDB ?

MongoDB 是由 C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为 WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

nosql数据库为什么高性能 nosql数据库的六大特性_数据库

2.2 主要特点

(1)MongoDB 的提供了一个面向文档存储,操作起来比较简单和容易。

(2)你可以在 MongoDB 记录中设置任何属性的索引 (如:FirstName=“Sameer”, Address=“8 Gandhi Road”)来实现更快的排序。

(3)你可以通过本地或者网络创建数据镜像,这使得 MongoDB 有更强的扩展性。

(4) 如果负载的增加(需要更多的存储空间和更强的处理能力),它可以分布在计算机网络中的其他节点上这就是所谓的分片。

(5)Mongo 支持丰富的查询表达式。查询指令使用 JSON 形式的标记,可轻易查询文档中内嵌的对象及数组。

(6) MongoDb 使用 update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。

(7)Mongodb 中的 Map/reduce 主要是用来对数据进行批量处理和聚合操作。

(8)Map 和 Reduce。Map 函数调用 emit(key,value)遍历集合中所有的记录,将 key 与 value 传给 Reduce 函数进行处理。

(9)Map 函数和 Reduce 函数是使用 Javascript 编写的,并可以通过 db.runCommand 或 mapreduce 命令来执行 MapReduce 操作。

(10) GridFS 是 MongoDB 中的一个内置功能,可以用于存放大量小文件。

(11) MongoDB 允许在服务端执行脚本,可以用 Javascript 编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。

(12)MongoDB 支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。

(13) MongoDB 安装简单。

2.3 MongoDB 的配置

windows下配置:

1,创建logs文件夹,在下面创建log日志文件:C:\MongoDB\Server\3.4\data\logs\mongo.log
2,按照这个路径创建文件夹:C:\MongoDB\Server\3.4\data\db
3,配置环境变量
4,以管理员方式开启cmd
5,进入mongodb的bin文件夹下
6,运行以下命令(根据实际情况改路径):
mongod --bind_ip 0.0.0.0 --logpath D:\MongoDB\Server\3.4\data\logs\mongo.log --logappend --dbpath D:\MongoDB\Server\3.4\data\db --port 27017 --serviceName "MongoDB" -serviceDisplayName "MongoDB" --install
2.4 MongoDB 概念解析
SQL 术语/概念 -------------MongoDB 术语/概念-----------------------------解释/说明

database------------------------database -------------------------------数据库
table---------------------------- collection--------------------------数据库表/集合
row------------------------------document-------------------------数据记录行/文档
column-----------------------------field------------------------------数据字段/域
index------------------------------index--------------------------------索引
table joins-----------------------------------------------------表连接, MongoDB 不支持
primary key------------------- primary key-----------------主键,MongoDB 自动将_id字段设置为主键

在 mongodb 中基本的概念是文档集合数据库

2.5 MongoDB 基本命令

一个 mongodb 中可以建立多个数据库。

MongoDB 的默认数据库为"db",该数据库存储在 data 目录中。

MongoDB 的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

"show dbs"命令可以显示所有数据库的列表。

执行"db"命令可以显示当前数据库对象或集合。

运行"use"命令,可以连接到一个指定的数据库。

2.6 MongoDB 文档

文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

需要注意的是:

  1. 文档中的键/值对是有序的。
  2. 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
  3. MongoDB 区分类型和大小写。
  4. MongoDB 的文档不能有重复的键。
  5. 文档的键是字符串。除了少数例外情况,键可以使用任意 UTF-8 字符。

文档键命名规范:
 键不能含有\0 (空字符)。这个字符用来表示键的结尾。
 .和$有特别的意义,只有在特定环境下才能使用。
 以下划线"_"开头的键是保留的(不是严格要求的)。


集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式 和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

2.7 MongoDB 合法的集合名

 集合名不能是空字符串""。
 集合名不能含有\0 字符(空字符),这个字符表示集合名的结尾。
 集合名不能以"system."开头,这是为系统集合保留的前缀。
 用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的 集合,否则千万不要在名字里出现$。


创建数据库:

use DATABASE_NAME

删除数据库:

db.dropDatabase()

MongoDB 创建集合:

db.createCollection(name, options)

删除集合:

db.collection.drop()

MongoDB 使用 insert()或 save()方法向集合中插入文档,语法如下:

db.COLLECTION_NAME.insert(document)

MongoDB 使用 update()和 save()方法来更新集合中的文档:
update()方法用于更新已存在的文档。语法格式如下:

db.collection.update(
<query>, 
<update>,
{
upsert: <boolean>,
multi: <boolean>, writeConcern: <document>
}
					)

MongoDB remove()函数是用来移除集合中的数据。MongoDB 数据更新可以使用 update()函数。在执行 remove()函数前先执行 find()命令来判断执行的条件是否正确,这是一个比较好的习惯。

2.8 其它命令(略)