9.1 关系型数据库尚能饭否

   在大数据、NoSQL以及NewSQL等新技术的轮番轰炸后,依然是主流

  9.1.1 优势

    开发优势:SQL查询灵活度非常高,方便的进行联机事务处理。JDBC完善。ORM完善。

            ORM是为了解决 面向对象和关系型数据库阻抗不匹配的问题的:

                       (阻抗不匹配: 比如一个Opprotunity下面有多个LineItems, 面向对象很好表示这种关系,Opp对象下有一个lineitems的List; 但是在关系型数据库中,就有两张表,关联之后才能表示一个Opportunity.)

    运维优势:DBA

    系统优势: 成熟。ACID事务。 在编程中使用事务并非难事,Spring等各类开发框架已经在面向切面层面做的非常好了。

  9.1.2 不足

    单节点的并发访问量受到限制:数据越多,索引深度越深。I/O访问次数多。

    单节点数据承载量受限:

    分布式事务性能衰减严重:将数据库拆分之后,需要使用分布式事务代替本地事务。

9.2 未达预期的NoSQL

  Not Only SQL,并不是为为了取代关系型数据库。

  9.2.1 键值数据库

    代表是Redis: 在很多情况下当做缓存使用,但同样提供了落盘(磁盘持久化)。通过主键进行查询的场景,Redis效率非常高,但对于内容查询则无能为力。

redis提供了集群处理能力(3.0之后支持),可以将数据分散到不同的节点,有效解决了单一节点访问量瓶颈。如果数据量过大,导致Redis数据不能全部加载到内存,需要落盘,Redis性能会下降,因此在数据量大的时,将Redis的数据根据主键进行分片是不错的方案。

  9.2.2 文档数据库

  代表是MongoDB:文档模型与面向对象的数据表达式更加接近,它有自由度极高的Schema模型,可以方便地与JSON数据进行映射。

  文档数据数据库的设计理念与关系型数据库的设计理念完全不同,它没有静态定义的表结构,使用文档数据库时,可以灵活地在文档中随意增减属性,嵌入文档和数组。文档数据库设计应用程序是以对象本身为主的,而不是优先考虑数据库表结构如何定义。

  MongoDB查询十分灵活,可以建立索引,提升效率。

  MongoDB在分布式的表现上也远强于关系型数据库,它可以将数据自动分片,并且能够透明化分片之间的负载均衡和失效转移。

  从4.0开始,支持ACID事务,以前是最终一致性。但是ACID还需考察,关键业务不能用。

  9.2.3 列族数据库

  代表是Hadoop, HBase 它是专门用于处理海量数据库的分布式数据库。

  图数据库用于处理图关系的数据库,这里不介绍。

  NOSQL适合于海量数据和高并发的场景,性能强于传统的关系型数据库。

    NOSQL有自己的查询语言,接口标准不统一。无法提供ACID事务能力,不能用于核心系统。

  NOSQL是SQL的补充 而不是代替。 

9.3 冉冉升起的NewSQL

  9.3.1 新架构

  9.3.2 透明化分片中间件

  9.3.3 云数据库

9.4 云原生数据库中间件的核心功能

  9.4.1 数据分片

  9.4.2 分布式事务

  9.4.3 数据库治理