一:为什么要用到NoSql?
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集群:不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提供服务和访问。
例子:分布式:拔羊毛,不能在同一只羊上拔毛。