1.为什么要用NoSql?
今天我们可以通过第三方平台(如:Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL数据库的发展也却能很好的处理这些大的数据。
2.NoSql是什么?
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。
(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
3.NoSql的作用:
• 易扩展:NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。
• 大数据量高性能:NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。
• 一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,
在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了。
• 多样灵活的数据类型:NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦
4.RDBMS vs NoSql:
(1)RDBMS------>
• 高度组织化结构化数据
• 结构化查询语句(SQL)
• 数据和关系都存储在单独的表中
• 数据操纵语言,数据定义语言
• 严格的一致性
• 基础事物
(2)NoSql------->
• 代表的不仅仅是Sql
• 没有声明性查询语句
• 没有预定义模式
• 键值对存储,列存储,文档存储,图形数据库
• 最终一致性,而非ACID
• 非结构化和不可预知的数据
• CAP定理
• 高性能,高可用性和可伸展性
5.NoSql的主要三个关键词:
• KV
• Cache
• Persistence
6.3V+3高
(1)大数据时代的3V:
• 海量Volume
• 多样Variety
• 实时Velocity
(2)互联网需求的三高
• 高并发
• 高可扩(横向扩展)-->加机器
• 高性能
7.当下NoSql的经典应用:阿里巴巴中文网站商品信息(首页)存放:
• 商品基本信息:关系型数据库:mysql/oracle目前淘宝在去O化(也即拿掉Oracle),注意,淘宝内部用的Mysql是里面的大牛自己改造过的。“去IOE”(在IT建设过程中,去除IBM小型机、Oracle数据库及EMC存储设备)的本质是分布化,让随处可以买到的Commodity PC架构成为可能,使云计算能够落地的首要条件。
• 商品的描述、详细、评价:多文字类描述,IO读写性能变差。数据主要存储在文档数据库MongDB中。
• 商品的图片:商品图片展现类:存储于分布式的文件系统的。淘宝有自己的TFS、谷歌有GFS、Hadoop有HDFS.
• 商品的关键字:搜索引擎:ISearch
• 商品的波段性的热点性高频信息:内存数据库:Tair、Readis、Memcache
• 商品的交易、价格计算、积分累计:外部系统,外部第三方支付系统,支付宝。
8.总结大型互联网应用(大数据、高并发、多样数据类型)的难点及解决办法:
难点:(1)数据类型多样性。
(2)数据源多样性和变化重构。
(3)数据源改造而数据平台不需要大面积重构。
解决办法:统一数据服务层USDL(类似于JDBC)-->1、映射 2、API 3、热点缓存
9.NoSql数据模型简介(与传统数据库进行比较了解):
以一个电商客户、订单、订购、地址模型来对比下关系型数据库和非关系型数据库。
(1) 传统的关系型数据库:
(2)NoSql你如何设计?
利用BSON存储格式。
什么是BSON? BSON()是一种类似JSON的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象 。
{
"customer":{
"id":1136,
"name":"Z3",
"billingAddress":[{"city":"beijing"}],
"orders":[
{
"id":17,
"customerId":1136,
"orderItems":[{"productId":27,"price":77.5,"productName":"thinking in java"}],
"shippingAddress":[{"city":"beijing"}]
"orderPayment":[{"ccinfo":"111-222-333","txnid":"asdfadcd334","billingAddress":{"city":"beijing"}}],
}
]
}
}
思考:为什么上述情况可以使用聚合模型来处理?
• 高并发的操作是不太建议有关联查询的,互联网公司用冗余数据来避免关联查询。
• 分布式事务是支持不了太多的并发的。
10.NoSQL数据库的四大分类
(1) KV 键值:典型介绍
新浪: BerkeleyDB+redis
美团: redis+tair
阿里、百度: memcache+redis
(2) 文档型数据库 (bson 格式比较多) :典型介绍
CouchDB
MongoDB
MongoDB 是一个基于分布式文件存储的数据库 ,是一个介于关系数据库和非关系 数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
(3) 列存储数据库:分布式文件系统:Cassandra, HBase
(4) 图关系数据库:它不是放图形的,放的是关系:朋友圈社交网络、广告推荐系统社交网络,推荐系统等,专注于构建关系图谱:Neo4J, InfoGrid
(5) 四者对比:
11.在分布式数据库中CAP原理CAP+BASE:
(1) 传统的ACID分别是什么
• A (Atomicity) 原子性
• C (Consistency) 一致性
• I (Isolation) 独立性
• D (Durability) 持久性
(2) CAP
• C:Consistency(强一致性)
• A:Availability(高可用性)
• P:Partition tolerance(分区容错,容忍性)
(3) CAP的3进2
CAP就是说在分布式存储系统中,最多只能实现上面的两点,而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的,所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。
C:强一致性 A:高可用性 P:分布式容忍性
CA :传统Oracle数据库
AP :大多数网站架构的选择
CP : Redis、Mongodb
注意:分布式架构的时候必须做出取舍,一致性和可用性之间取一个平衡。多余大多数web应用,其实并不需要强一致性,因此牺牲C换取A,这是目前分布式数据库产品的方向。
(4) 经典CAP图:
CAP理论的核心:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个,因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、CP 原则 和 AP 原则三 大类:
CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。
CP - 满足一致性,分区容忍必的系统,通常性能不是特别高。
AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。
(5) BASE:BASE就是为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案。典型应用:阿里11.11,京东6.18。
BASE其实是下面三个术语的缩写:
基本可用(Basically Available)
软状态(Soft state)
最终一致(Eventually consistent)
它的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改观。为什么这么说呢,缘由就在于大型系统往往由于地域分布和极高性能的要求,不可能采用分布式事务来完成这些指标,要想获得这些指标,我们必须采用另外一种方式来完成,这里BASE就是解决这个问题的办法。
12.分布式和集群
•分布式:不同的多台服务器上面部署不同的服务模块(工程),它们之间通过Rpc/Rmi之间通信和调用,对外提供服务和组内协作;
•集群:不同的多台服务器上面部署相同的服务模块,通过分布式调度软件进行统一的调度,对外提供服务和访问;