最近学习的第一个Nosql就是Mongodb,为了了解Nosql的基本知识,特意总结,主要是学习Nosql的理论算法
一.Introduction(介绍)sql
它是“ 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定理,指的是在一个分布式系统中:
定理:任何的分布式系统只能同时知足其中两点,不可作到三者兼得,此理论在分布式存储系统中,最多只能实现上面两点
2.BASE思想(彻底不一样于ACID思想,牺牲了高一致性,得到可用性或者可靠性)
BASE思想(或者说是BASE模型),BASE是Basically Available(基本可用),Soft state(软状态/柔性事务)和Eventually consistent(最终一致性)的缩写:
定理:主要强调基本的可用性,也就是若是追求高性能,那么就要牺牲一致性或者容错性,总之BASE思想是对CAP原则中的一致性和可用性权衡的结果
CAP原则是NoSQL数据库的基础,因此记住这个BASE思想和CAP原则!!!!
3.与NoSQL的关系
如今NoSQL就丰富了BASE思想,可按照具体的状况定制特别方案,相对关系型数据库的ACID原则,NoSQL系统一般注重性能和扩展性,而非ACID中的事务机制,事务就要求一致性
三.NoSQL 数据库分类
数据库分为四大类:
1.键值(Key-Value)存储数据库
是一种以键值对存储数据的一种数据库,相似Java的Map,每一个键对应惟一的值,表明的
2.列存储数据库
一般是用来应对分布式存储的海量数据,是以列相关存储架构进行的数据存储的数据库,主要适合批量数据处理和即时查询
3.文档型数据库
该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,好比JSON。文档型数据库可 以看做是键值数据库的升级版,容许之间嵌套键值。并且文档型数据库比键值数据库的查询效率更高
4.图形(Graph)数据库
图形结构的数据库同其余行列以及刚性结构的SQL数据库不一样,它是使用灵活的图形模型,而且可以扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),所以进行数据库查询须要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API