NoSQLYangkejing2018.12.17NoSQL简介0102NoSQL与关系数据库的比较NoSQL的四大类型03目录NoSQL的三大基石04NoSQL简介第一部分PartOneNoSQLIntroductiontothe一.什么是NoSQL数据库?NoSQL:即NotOnlySQL与关系型数据库相对应的,也可理解为norelational,即非关系型数据库二.NoSQL数据库的产生AB关系数据库面临挑战大数据发展关系数据库面对超大规模和高并发的SNS类型的web2.0纯动态网站显得力不从心,暴露了很多难以克服的问题大规模数据集合,多重数据带来了许多挑战,尤其是大数据应用难题厄待解决关系数据库面临的挑战传库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题统的关系数据,例如:1、Highperformance-对数据库高并发读写的需求;2、HugeStorage-对海量数据的高效率存储和访问的需求;3、HighScalability&&HighAvailability-对数据库的高可扩展性和高可用性的需求;NoSQL与关系数据库的比较第二部分PartOnePLEASEADDYOURTITLEHERE功能NOSQL1.功能简单2.基本只支持主键查询,有的NOSQL支持非主键查询(不过非主键查询时,其性能也很慢),很少有NOSQL支持二级索引3.不支持关联查询,如果有复杂关联查询的需求,NOSQL无法支持4.不支持ACID,仅仅支持单记录级的原子操作,如果有高一致性要求的场景,NOSQL很难支持5.noschema多条记录可以有不同数量的字段,存储方便6.自身可以分片扩容比较方便关系数据库1.功能复杂2.支持主键查询和其他字段查询(建立二级索引)3.支持关联查询4.支持ACID5.有schema约束6.自身无分片功能NOSQL性能比较高关系数据库性能较低,因为其要保证事务一致性要做很多检查、加锁等操作,所以很慢,而且关联查询也很复杂,导致效率较低,经常有查询业务不走索引,查询速度也很慢,主要还是因为功能复杂导致的性能较低VS性能总结选择NOSQL需要下面2个必要条件:1.不需要ACID2.不需要关联查询如果需要以上两个功能,无法选择NOSQL下面是选择NOSQL的充分条件:1表结构不固定【因为关系数据库表结构是固定的,这个是NOSQL唯一比关系数据库好的能力点(笔者个人认知,因为NOSQL的高性能是牺牲一致性等功能为代价的)】NoSQL的四大类型第三部分PartOnePLEASEADDYOURTITLEHERENoSQL的四大类型1键值数据库2列族数据库3文档数据库4图形数据库1键值数据库相关产品:Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached应用:内容缓存优点:扩展性好、灵活性好、大量写操作时性能高缺点:无法存储结构化信息、条件查询效率较低使用者:百度云(Redis)、GitHub(Riak)、BestBuy(Riak)、Twitter(Ridis和Memcached)2列族数据库相关产品:BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS应用:分布式数据存储与管理优点:查找速度快、可扩展性强、容易进行分布式扩展、复杂性低使用者:Ebay(Cassandra)、Instagram(Cassandra)、NASA(Cassandra)、Facebook(HBase)3文档数据库相关产品:MongoDB、CouchDB、ThruDB、CloudKit、Perservere、Jackrabbit应用:存储、索引并管理面向文档的数据或者类似的半结构化数据优点:性能好、灵活性高、复杂性低、数据结构灵活缺点:缺乏统一的查询语言使用者:百度云数据库(MongoDB)、SAP(MongoDB)4图形数据库相关产品:Neo4J、OrientDB、InfoGrid、GraphDB应用:大量复杂、互连接、低结构化的图结构场合,如社交网络、推荐系统等优点:灵活性高、支持复杂的图形算法、可用于构建复杂的关系图谱缺点:复杂性高、只能支持一定的数据规模使用者:Adobe(Neo4J)、Cisco(Neo4J)、T-Mobile(Neo4J)NoSQL的三大基石第四部分PartOnePLEASEADDYOURTITLEHERENoSQL的三大基石CAPC:Consistency一致性A:Availability可用性(指的是快速获取数据)P:ToleranceofnetworkPartition分区容忍性(分布式)10年前,EricBrewer教授指出了著名的CAP理论,后来SethGilbert和Nancylynch两人证明了CAP理论的正确性。CAP理论告诉我们,一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。熊掌与鱼不可兼得也。关注的是一致性,那么您就需要处理因为系统不可用而导致的写操作失败的情况,而如果您关注的是可用性,那么您应该知道系统的read操作可能不能精确的读取到write操作写入的最新值。因此系统的关注点不同,相应的采用的策略也是不一样的,只有真正的理解了系统的需求,才有可能利用好CAP理论。作为架构师,一般有两个方向来利用CAP理论key-value存储,如AmazeDynamo等,可根据CAP三原则灵活选择不同倾向的数据库产品。领域模型+分布式缓存+存储(Qi4j和NoSql运动),可根据CAP三原则结合自己项目定制灵活的分布式方案,难度高。而对大型网站,可用性与分区容忍性优先级要高于数据一致性,一般会尽量朝着A、P的方向设计,然后通过其它手段保证对于一致性的商务需求。架构设计师不要精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。不同数据对于一致性的要求是不同的。举例来讲,用户评论对不一致是不敏感的,可以容忍相对较长时间的不一致,这种不一致并不会影响交易和用户体验。而产品价格数据则是非常敏感的,通常不能容忍超过10秒的价格不一致。最终一致性一言以蔽之:过程松,结果紧,最终结果必须保持一致性为了更好的描述客户端一致性,我们通过以下的场景来进行,这个场景中包括三个组成部分:存储系统存储系统可以理解为一个黑盒子,它为我们提供了可用性和持久性的保证。ProcessAProcessA主要实现从存储系统write和read操作ProcessB和ProcessCProcessB和C是独立于A,并且B和C也相互独立的,它们同时也实现对存储系统的write和read操作。BASE上面提到,在分布式环境中,CAP只能取两者。但是,因为网络分区的情况不可避免,并且它对可用性有着重要影响,所以互联网中的分布式系统多在一致性方面做些折中。虽然不能达到强一致性,但可以根据应用特点采用适用的手段来达到够用的一致性效果。比如,对于微博系统,当用户新增一条消息,能够达到用户能看到刚才发的消息、而他的follower们能在尽快时间看到他新发的消息的效果就可以了。而在实现时,就可以结合同步和异步多种策略、SQL+NOSQL多种存储方案来满足应用需要。BASE(Basically?Available、Soft?state、Eventually?consistent)是对CAP中的AP的延伸。在单机环境中,ACID是数据的属性;而在分布式环境中,BASE就是数据的属性。ACID有“尖刻”之含义,所以单机环境的数据有着很高的要求。而因为分布式环境的网络分区性及复杂性,对数据也只能有“基本”的要求了。从ACID到CAP和BASE,从单机到分布式,从SQL到NOSQL,互联网应用的大规模发展促使不断出现可替代旧方案的新技术。在技术选型方面,重要的是根据自己的应用特点选择自己能驾驭的技术。而现实的应用场景,也大多是多种技术方案的结合。演示完毕谢谢欣赏POWERPOINTTEMPLATE