第7章 分布式系统架构 【分布式数据库】

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数据库都是专有软件或仅适用于特定场景,这显然限制了新技术的普及和应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值