15、分布式数据库
15.1 MPP数据库的运行原理
大规模并行处理(Massively Parallel Processing,MPP)数据库,是一种较早基于Shared Nothing存储思想设计的一种分布式数据库。在该数据库中,每个节点都有独立的磁盘存储与内存,业务数据根据数据库模型及其应用特点被划分到各个节点上。同时,每个节点都通过专用网络互相连接、彼此协同,并作为整体对外提供数据库服务。
MPP架构是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果。
MPP数据库虽然实现了分布式存储,采用的依然是二维表的存储方式,在系统性能与可扩展性方面都存在着较大局限。这些局限无法适应未来分布式架构的发展。所以,未来的分布式数据库必然会更多地朝着NoSQL数据库、NewSQL数据库以及k-v存储的方向发展。
MPP架构数据库应具有的特征:
(1)任务并行执行;
(2)数据分布式存储(本地化);
(3)分布式计算;
(4)私有资源;
(5)横向扩展;
(6)Shared Nothing架构。
常用的MPP数据库有哪些:
GreenPlum、Vertica、Sybase IQ、TD Aster Data
一般来说,我们都会更倾向于GreenPlum,而且阿里的云数据库HybirdDB也是基于GreenPlum的开源项目。
15.2 NoSQL数据库的运行原理
NoSQL数据库可以分为键值存储数据库(如Reids)、列式存储数据库(如HBase)、文档存储数据库(如MongoDB)以及图数据库(如Neo4j)。然而无论哪种类型,都有一个共同的特点:放弃了二维表,采用k-v存储。
要理解NoSQL数据库,必须要理解分布式CAP理论。该理论认为在分布式存储系统中,有三个属性是相互制约的,我们最多只能同时优化其中两个,而不可能三个都优化,所以只能在三个属性中进行权衡。
(1)一致性(C):在数据更新时,所有的用户在同一时刻查询到的数据都是相同的,要么都是更新前的数据,要么都是更新后的数据。
(2)可用性(A):在集群中即使部分节点发生故障,整个集群依然能正常运行,以响应客户端的读写请求。
(3)分区可容忍(P):数据可以通过分区均匀分布到集群中的各个节点上,以实现系统的无限扩展。
NoSQL数据库是由多个节点组成的集群,并且要实现多节点复制。因此,NoSQL数据库在更新一条数据时会先在某个节点上更新,然后复制到其他节点上。那么,这个数据复制在不在该数据库事务中呢?如果不在事务中,NoSQL数据库将该数据在第一个节点上更新完成后,事务就结束了。然后,通过其他进程完成后续的数据复制。这样的设计虽然可以获得性能的提升,但从第一个节点上读取的是更新后的数据,而从其他几个节点上读取的可能是更新前的数据,那么数据就不一致了。
如果数据复制在事务中,那么只有完成整个数据的复制,事务才能结束,从而保证在任何节点读到的数据都是一致的。然而,在数据复制时,如果某个节点发生宕机,该复制将无法结束,造成数据库事务无法结束,系统可用性将存在问题。
分区可容忍是NoSQL数据库与关系型数据库的主要差别。由于关系型数据库在存储时采用的是二维表,使得它很难通过分区进行多节点存储;MPP数据库虽然可以多节点存储,但一旦需要拓展节点个数,就需要大范围移动数据库中的数据,拓展成本很高,并且性能提升有限;而NoSQL数据库采用的都是k-v存储,可以较为自由地通过分区进行散列存储,并且通过key值快速定位数据的位置,从而获得较好的系统查询性能。
总之,传统的关系型数据库可以保证C和A,称为CA模型;NoSOL数据库通常需要在C和A中选择一个,但都能够保证P,因此又分为CP模型与AP模型。为了能更好地提升系统性能,更多的NoSQL数据库往往放弃C面选择AP模型。这样,教据库事务的设计就分为两种思路:A(原子性)C(一致性)I(隔离性)D(持久性)原则,即传统的关系型数据库必须保证的4个属性; Base [Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent (最终一致性)]原则,即数据库采用的是柔性事务,它可能在某段时间事务不一致,但追求的是最终一致性。前一种称为“强一致性”, 而后一种称为“弱一致性”。因此,关系型数据库通过横向与纵向的切分,大量应用在业务系统的生产库中,而NoSQL数据库则大量应用在业务系统的查询库中。
15.3 NewSQL数据库的运行原理
数据库发展历程:
(1)SQL:传统关系型数据库,MySQL
(2)NoSQL:MongoDB
(3)NewSQL:TiDB
SQL 的问题:
互联网在本世纪初开始迅速发展,互联网应用的用户规模、数据量都越来越大,并且要求7X24小时在线。
传统关系型数据库在这种环境下成为了瓶颈,通常有2种解决方法:
(1)升级服务器硬件
虽然提升了性能,但总有天花板。
(2)数据分片,使用分布式集群结构
对单点数据库进行数据分片,存放到由廉价机器组成的分布式的集群里。
可扩展性更好了,但也带来了新的麻烦。
以前在一个库里的数据,现在跨了多个库,应用系统不能自己去多个库中操作,需要使用数据库分片中间件。
分片中间件做简单的数据操作时还好,但涉及到跨库join、跨库事务时就很头疼了,很多人干脆自己在业务层处理,复杂度较高。
NoSQL 的优势与不足:
后来 NoSQL 出现了,放弃了传统SQL的强事务保证和关系模型,重点放在数据库的高可用性和可扩展性。
NoSQL 的主要优势:
(1)高可用性和可扩展性,自动分区,轻松扩展
(2)不保证强一致性,性能大幅提升
(3)没有关系模型的限制,极其灵活
NoSQL不保证强一致性,对于普通应用没问题,但还是有不少像金融一样的企业级应用有强一致性的需求。而且NoSQL不支持SQL语句,兼容性是个大问题,不同的 NoSQL 数据库都有自己的API操作数据,比较复杂。
NewSQL 特性:
NewSQL数据库放弃了关系型数据库的二维表,沿用了NoSQL数据库的k-v存储,这样可以获得较好的系统性能与可扩展性,但会影响数据一致性。为此,NewSQL数据库在k-v存储的基础上增加了一个数据一致性框架,这样会在一定程度上影响系统性能,即采用CP模型,在完成数据多节点复制以后才能结束事务。因此,NewSQL数据库永远介于二者之间,论性能比关系型数据库好,论数据一致性比NoSQL数据库好。
NewSQL支持SQL。实际上就是在k-v存储的基础上,增加了一个命令的格式转换。用户用SQL语句操作数据,然后NewSQL数据库将SQL操作转换为k-v操作。这样不仅仅是命令格式的转换,k-v存储的方式也在一定程度进行了调整。
NewSQL的主要特性:
(1)SQL 支持,支持复杂查询和大数据分析。
(2)支持 ACID 事务,支持隔离级别。
(3)弹性伸缩,扩容缩容对于业务层完全透明。
(4)高可用,自动容灾。
三种类型数据库的比较 | |||
关系型数据库 | NewSQL数据库 | NoSQL数据库 | |
CAP模型 | CA模型 | CP模型 | AP模型 |
存储形式 | 二维表 | k-v存储 | k-v存储 |
系统性能 | 低 | 中 | 高 |
可扩展性 | 低 | 中 | 高 |
数据一致性 | 强 | 中 | 弱 |
支持SQL | 支持 | 支持 | 不支持 |
目前大多数NewSQL数据库都是专有软件或仅适用于特定场景,这显然限制了新技术的普及和应用。