一:为何要用到NoSql?html
NoSQL(NoSQL = Not Only SQL ),意即“不只仅是SQL”,
泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是
超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了不少难以克服的问题,而非关系型的数据库则因为其自己的特色获得了很是迅速的发展。
NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤为是大数据应用难题,包括超大规模数据的存储。
(例如谷歌或Facebook天天为他们的用户收集万亿比特的数据)。这些类型的数据存储不须要固定的模式,无需多余操做就能够横向扩展。
二:能干吗?
1.
扩展性比较强,没有特定的数据类型,数据之间没有关系,无形当中,在框架的层面上带来可扩展能力
2.
大数据量,高性能:有很是高的读写性能,尤为是在大数据的状况下,一样表现优秀(写1秒8万,读1秒11万),这得益于他的无关系性
数据结构简单。
3.
多样灵活的数据模型:NoSQL 无需事先为要存储的数据创建字段,可随时存储自定义的数据格式,而关系型数据库,增删字段是很是麻烦的,若是在很是大的数据库量下,增删字段简直是噩梦
附:NoSQL 非关系型数据库有:Tair,Redis,Memcache,MongBD(最像关系型数据库的非关系型数据库 )
Nosql不是ACID特性,因此彻底不适合来作支付,应该考虑关系型数据库作支付
Nosql主要用来作数据分析,ETL,报表,数据挖掘,推荐,日志处理等非交易场景
三:怎么玩?(面试时问谈谈你对Redis理解,能干什么?)
KV:键值对
Cache:缓存
Persistence :持久化
四:3V和3高:
大数据下的3V: 海量(Volume),多样(Variety),实时(Velocity),
互联网需求的3高:高并发,高性能,高可扩
附:阿里去IOE:去除IBM小型机,去除Oracle,去除EMC存储设备
阿里多隆工程师写的搜索引擎:ISearch
牛逼的人在牛逼以前都会有一段苦逼的岁月,但只要你傻逼同样的坚持,你会终将牛逼
五:BSON:
JSON的一种二进制形式的存储模式,简称:Binary JSON
它和JSON同样,支持内嵌的文档对象和数组对象
附:
分布式系统很是忌讳多表关联查询的 ***
六:NoSQL数据模型简介:
七:NoSQL数据库的四大分类
1. KV键值也是企业用到最多的
2. HBase:Hadoop的东西
3.图关系数据库,统计啊,朋友圈,广告推荐(分析的不算太准,由于因素太多,可能打开网页去打麻将了,没看网页)
四者对比:
附:MongoDB:(文档型数据库典型表明)
MongoDB 是一个基于
分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
八:分布式数据库CAP原理和BASE(CAP又称帽子理论)
1.CAP的3进2:http://www.cnblogs.com/maxlei/p/6833538.html
2.CAP理论的核心是:一个分布式系统不可能同时很好的知足一致性,可用性和分区容错性这三个需求,最多只能同时较好的知足两个。
所以,根据 CAP 原理将 NoSQL 数据库分红了知足 CA 原则、知足 CP 原则和知足 AP 原则三 大类:
CA - 单点集群,知足一致性,可用性的系统,一般在可扩展性上不太强大。
CP - 知足一致性,分区容忍必的系统,一般性能不是特别高。
AP - 知足可用性,分区容忍性的系统,一般可能对一致性要求低一些。
3.BASE:
BASE就是为了解决关系数据库强一致性引发的问题而引发的可用性下降而提出的解决方案。
BASE实际上是下面三个术语的缩写:
基本可用(Basically Available)
软状态(Soft state)
最终一致(Eventually consistent)
它的思想是经过让系统放松对某一时刻数据一致性的要求来换取系统总体伸缩性和性能上改观(牺牲A,换取CP)。为何这么说呢,原因就在于大型系统每每因为地域分布和极高性能的要求,不可能采用分布式事务来完成这些指标,要想得到这些指标,咱们必须采用另一种方式来完成,这里BASE就是解决这个问题的办法
例子:淘宝双11的时候牺牲放松高一致性来换取系统的性能,可是最终要把结果或者数据一致了。 牺牲A,换取CP
4.分布式和集群:
分布式系统(distributed system)
由多台计算机和通讯的软件组件经过计算机网络链接(本地网络或广域网)组成。分布式系统是创建在网络之上的软件系统。正是由于软件的特性,因此分布式系统具备高度的内聚性和透明性。所以,网络和分布式系统之间的区别更多的在于高层软件(特别是操做系统),而不是硬件。分布式系统能够应用在在不一样的平台上如:Pc、工做站、局域网和广域网上等。
简单来说:
1分布式:不一样的多台服务器上面部署不一样的服务模块(工程),他们之间经过Rpc/Rmi之间通讯和调用,对外提供服务和组内协做。
2集群:不一样的多台服务器上面部署相同的服务模块,经过分布式调度软件进行统一的调度,对外提供服务和访问。
例子:分布式:拔羊毛,不能在同一只羊上拔毛。