NoSQL基础学习
最近学习的第一个Nosql就是Mongodb,为了了解Nosql的基本知识,特地总结,主要是学习Nosql的理论
一.Introduction(介绍)
它是“ Not Only Sql”的简称,非关系型数据库,它具有非常好的通用性和非常高的性能,它在处理大量的数据方面很有优势.
1.NoSql的出现是相对于传统的关系型数据库的,重点就是,Wiki上所说的:
NoSQL是對不同於傳統的關聯式資料庫的数据库管理系统的統稱。
兩者存在許多顯著的不同點,其中最重要的是NoSQL不使用SQL作為查詢語言。其數據存儲可以不需要固定的表格模式,也經常會避免使用SQL的JOIN操作,一般有水平可扩展性的特征。
那么它的出现的意义在哪?,答案就是随着在现代的计算系统上每天网络上都会产生庞大的数据量,而NoSQL就是在现代计算机领域必然出现的一种产物,至少我是这么认为的,当然,NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入,而且说到底NoSQL系统也就是分布式系统
这是一种全新的思维,就像学习算法一样,学习NoSQL,当然要学习它的特征,这是非常重要的,就像关系型数据库遵循了ACID规则,而NoSQL遵循了BASE规则,许多资料在介绍NoSQL时,都必然会对NoSQL进行比较,这里无不例外
2.发展历史
NoSQL一词最早出现于1998年,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。
2009年,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。
2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;"。因此,对NoSQL最普遍的解释是“非关聯型的”,强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。
基于2014年的收入,NoSQL市场领先企业是MarkLogic,MongoDB和Datastax。基于2015年的人气排名,最受欢迎的NoSQL数据库是MongoDB,Apache Cassandra和Redis。
二.Feature(特征)
NoSQL系统是分布式系统,分布式系统是建立在网上之上的软件系统,具有高度的透明性,在分布式数据库系统中,用户是感觉不到数据是分布的,就好像操作的是一个统一的整体,即用户不须知道关系是否分割、有无副本、数据库存于哪台机器及操作在哪台机器上执行,并不知道其内部工作需要由很多台机器协同完成。
1.CAP定理(分布式领域的CAP原则)
CAP原则又称CAP定理,指的是在一个分布式系统中:
- Consistency(强一致性),数据一致更新,所有数据变动都是同步的,更新一会后所有的节点在同一时刻具有相同的数据
- Availability(可用性),快速的响应性能,保证每个请求不管成功或者失败都有响应
- Partition tolerance(分区容错性),即可靠性,或者说系统中的某个节点发生错误,不会影响系统的继续运作
定理:任何的分布式系统只能同时满足其中两点,不可做到三者兼得,此理论在分布式存储系统中,最多只能实现上面两点
2.BASE思想(完全不同于ACID思想,牺牲了高一致性,获得可用性或者可靠性)
BASE思想(或者说是BASE模型),BASE是Basically Available(基本可用),Soft state(软状态/柔性事务)和Eventually consistent(最终一致性)的缩写:
- Basically Available(基本可用),支持分区失败(e.g.sharding碎片划分数据库)
- Soft state(软状态/柔性事务),状态可以有一段时间不同步,异步
- Eventually consistent(最终一致性),最终数据是一致的就可以了,而不是时时高一致
定理:主要强调基本的可用性,也就是如果追求高性能,那么就要牺牲一致性或者容错性,总之BASE思想是对CAP原则中的一致性和可用性权衡的结果
CAP原则是NoSQL数据库的基础,所以记住这个BASE思想和CAP原则!!!!
3.与NoSQL的关系
现在NoSQL就丰富了BASE思想,可按照具体的情况定制特别方案,相对关系型数据库的ACID原则,NoSQL系统通常注重性能和扩展性,而非ACID中的事务机制,事务就要求一致性
三.NoSQL 数据库分类
数据库分为四大类:
- 键值(Key-Value)存储数据库
- 列存储数据库
- 文档型数据库
- 图形(Graph)数据库
1.键值(Key-Value)存储数据库
是一种以键值对存储数据的一种数据库,类似Java的Map,每个键对应唯一的值,代表的
2.列存储数据库
通常是用来应对分布式存储的海量数据,是以列相关存储架构进行的数据存储的数据库,主要适合批量数据处理和即时查询
3.文档型数据库
该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高
4.图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API