MongoDB的使用
一、nosql的讲解
1、nosql
什么是nosql : NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系
型的数据库
nosql的代表:MongDB、 Redis、Memcache
2、为什么使用nosql
随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和
高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关
系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规
模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。
虽然NoSQL流行语火起来才短短几年的时间,但是不可否认,现在已经开始了第二代运动。尽
管早期的堆栈代码只能算是一种实验,然而现在的系统已经更加的成熟、稳定。不过现在也面临着
一个严酷的事实:技术越来越成熟——以至于原来很好的NoSQL数据存储不得不进行重写,也有少数
人认为这就是所谓的2.0版本。一些比较知名的工具,可以为大数据建立快速、可扩展的存储库。
例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需
要固定的模式,无需多余操作就可以横向扩展。
简而言之:就是为了满足现在的需求
3、常见的nosql
3.1) . 键值(Key-Value)存储数据库
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。
Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更
新的时候,Key/value就显得效率低下了。[3]
举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
3.2) . 列存储数据库
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了
多个列,这些列是由列家族来安排的。
如:Cassandra, HBase, Riak.
3.3文档型数据库
文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。
该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据
库可以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询
效率更高。
如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。
3.4) . 图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,
并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询
需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。
如:Neo4J, InfoGrid, Infinite Graph.
4、NoSql数据库在一下的这几种情况下比较适用
1) 数据模型比较简单;
2) 需要灵活性更强的IT系统;
3) 对数据库性能要求较高;
4) 不需要高度的数据一致性;
5) 对于给定key,比较容易映射复杂值的环境。
5、关系型数据库与NoSQL的区别?
5.1) . RDBMS (Relational Database Management System)
高度组织化结构化数据
结构化查询语言(SQL)
数据和关系都存储在单独的表中
数据操纵语言,数据定义语言
严格的一致性
基础事务
ACID
关系型数据库遵循ACID规则
事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:
A (Atomicity) 原子性
原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的
条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。比如银
行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B
账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其
妙少了100元。
C (Consistency) 一致性
一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数
据库原本的一致性约束。
I (Isolation) 独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外
一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。比如现
有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的
账户,是看不到新增加的100元的
D (Durability) 持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也
不会丢失。
5.2) . NoSql
代表着不仅仅是SQL
没有声明性查询语言
没有预定义的模式
键-值对存储,列存储,文档存储,图形数据库
最终一致性,而非ACID属性
非结构化和不可预知的数据
CAP定理
高性能,高可用性和可伸缩性
分布式数据库中的CAP原理(了解)
CAP定理:
Consistency(一致性), 数据一致更新,所有数据变动都是同步的
Availability(可用性), 好的响应性能
Partition tolerance(分区容错性) 可靠性
P: 系统中任意信息的丢失或失败不会影响系统的继续运作。
定理:任何分布式系统只可同时满足二点,没法三者兼顾。
CAP理论的核心是:
一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,
因此,根据 CAP 原理将 NoSQL 数据库分成了满足CA原则、满足CP原则和满足AP原
则三 大类:
CA-单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
CP-满足一致性,分区容忍性的系统,通常性能不是特别高。
AP-满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。
CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网
络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。
所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。
ps: C:强一致性 A:高可用性 P:分布式容忍性
举例:
CA:传统Oracle数据库
AP:大多数网站架构的选择
CP:Redis、Mongodb
注意: 分布式架构的时候必须做出取舍。一致性和可用性之间取一个平衡。多余大多
数web应用,其实并不需要强一致性。因此牺牲C换取P,这是目前分布式数据库产品的方向。
6、一些使用nosql的公司
Google、Facebook、Mozilla、Adobe、Foursquare、LinkedIn、Digg、
McGraw-Hill Education、Vermont Public Radio
二、MongoDB的基本讲解
1、MongoDB
什么是MongoDB : 是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应
用提供可扩展的高性能数据存储解决方案。
2、MongoDB的特点
1) 灵活动态文档模型 : 存储数据的格式为BSON,其是一种基于JSON的升级版本
2) 高可用性强 : 主要体现在mongodb的吞吐量上
3) 扩展性强 : 可以很方便的水平扩容
4) 全文搜索 : 支持全文查找匹配
5) 内存引擎 : 直接作用于内存,速度很快
3、MongoDB的使用场景
1) 网站数据 : MongoDB 非常适合实时的插入,更新与查询,并具备网站实时数据
存储所需的复制及高度伸缩性
2) 缓存:由于性能很高,MongoDB 也适合作为信息基础设施的缓存层。在系统重启
之后,由 MongoDB 搭建的持久化缓存层可以避免下层的数据源过载
3) 大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,
在此之前,很多时候程序员往往会选择传统的文件进行存储
4) 高伸缩性的场景:MongoDB 非常适合由数十或数百台服务器组成的数据库。
MongoDB的路线图中已经包含对 MapReduce 引擎的内置支持
5) 用于对象及 JSON 数据的存储:MongoDB 的 BSON 数据格式非常适合文档化格
式的存储及查询
例如:
1>游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文
档的形式存储,方便查询、更新
2>物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以
MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。
3>社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过
地理位置索引实现附近的人、地点等功能
4>物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志
信息,并对这些信息进行多维度的分析
5>视频直播,使用 MongoDB 存储用户信息、礼物信息等
4、MongoDB的安装
推荐的下载地址:http://dl.mongodb.org/dl/win32/x86_64
0.安装:先下载MongoDB的安装文件,一顿下一步,然后finish
1.配置环境变量:
打开系统的环境变量设置项-->编辑
path : C:\Program Files\MongoDB\Server\3.4\bin
2.配置数据存放的地方和日志存放的位置
在D盘下创建一个名字为MongodbData的文件夹,并在里面创建两个文件夹分
别为data和logs 还有一个配置文件(mongod.config) ,且在logs文件夹下
创建一个mongodb.log 的文件
3.以管理员身份运行的cmd中先进入到C:\Program Files\MongoDB\Server\3.4\bin下
本次操作输入的指令为:cd "C:\Program Files\MongoDB\Server\3.4\bin"
4.将MongoDB的服务写入到Windows的服务启动项中:
设置为自动,是为了以后使用的时候方便
本次操作输入指令(指令是一整句,每一小句后需要有空格隔开):
mongod --dbpath
"D:\MongodbData\data"
--logpath "D:\MongodbData\logs\mongodb.log" --install
--serviceName "MongoDB"
5.启动新添加的系统服务:net start MongoDB
6.验证成功: 此时是已经启动了MongoDB的服务了,为了验证是否成功可以在浏览器
端输入:“http://127.0.0.1:27017”如果出现It looks like you are trying to
access MongoDB over HTTP on the native driver port.说明是启动成功了
ps: 以上操作均是在win10系统中,且匹配的mongoDB的版本为
mongodb-win32-x86_64-2008plus-ssl-3.4.6-signed.msi
操作示例图片
1.配置环境变量.png
2.配置数据存放的地方和日志存放的位置.png
3.步骤操作.png