医疗诊断类AI项目落地的十步走
2019/12/17 14:55:49
【51CTO.com快译】在过去的近40年中,SQL已经成为了关系型数据库(又称为RDBMS)的通用语言。这也就是为什么关系型数据库经常被简单称为SQL数据库的原因。从架构而言,以Oracle、PostgreSQL和MySQL为首的传统SQL数据库,是单体式(monolithic)的。也就是说,它们无法在多个实例之间自动地分配数据和查询。而NewSQL数据库的出现使得SQL具有了可扩展性和高性能。当然,此类数据库仍然具有与生俱来的局限性。
2015年,Docker容器和Kubernetes编排的出现,让我们能够以灵活、可组合的基础架构方式,来创建各种基于微服务的应用。其中,内置的可扩容性、灵活性、以及地理分布特性,是此类云原生架构的核心特点。这也就是人们常说的“分布式SQL”--这一新型的数据库。在应用方面,此类分布式SQL数据库的一个显著特征是:无论其中有多少个节点,整个数据库集群对于应用程序而言,都被其视为一个逻辑的SQL数据库。
数据库的架构
分布式SQL数据库通常具有如下三层体系结构。
1. SQL API
顾名思义,分布式SQL数据库仍然必须提供SQL API服务,以便应用程序可以对关系型数据进行建模,并执行涉及到各种关系信息的查询操作。它保留了SQL数据库典型的数据建模结构,包括:索引、外键约束、JOIN查询、以及多行ACID事务(译者注:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability))。
2.分布式查询执行
由于分布式SQL的查询能够被自动地分配到目标群集的多个节点上,因此,此举有效地避免了单个节点成为查询处理中的瓶颈问题。具体的查询流程为:目标群集中的任一节点都可以接受传入的某个查询。通过在网络中的各节点之间传输数据、协同工作,该节点能够以最小化处理等待时间的方式,仅分担查询请求中的一部分任务。而由其他节点协助完成剩余的部分。最后,该接受请求的原始节点,将汇总所有的查询结果,并发回给客户端应用程序。
3.分布式数据存储
那些包含有索引信息的数据会被自动分布(也称为分片,sharded)到群集的多个节点处。此举确保了单个节点都不会成为高性能和高可用性的瓶颈。此外,数据库集群能够支持高一致性的复制、以及多行(也称为分布式)ACID事务,进而保留了单个逻辑数据库的基本概念。
高度一致性的复制
在数据库的管理概念中,所谓支持强大的SQL API层,其本质上就是要求处于底层的存储层,能够在跨数据库的群集节点上建立强一致性的复制。这就意味着:对于数据库的写入操作,将会在多个节点上被同步提交,以保证出现故障时的数据可用性。而读取操作则是基于最后一次被提交的写入数据,或是出错之前的数据。该属性通常被称为线性一致性(Linearizability,http://www.bailis.org/blog/linearizability-versus-serializability/)。根据著名的CAP原则(https://towardsdatascience.com/cap-theorem-and-distributed-database-management-systems-5c2be977950e,译者注:一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)),分布式SQL数据库具有一致性和分区容错性。
分布式的ACID事务
为了能够支持分布式的ACID事务,分布式数据库的存储层需要在多个节点的多个数据行中进行事务性的协调任务。此处,它们正好用到了两阶段提交(2 Phase Commit,2PC)协议。参照ACID中I(隔离性)的要求,为了能够对并发式的数据访问实现严格的隔离,分布式SQL数据库将可序列化性(Serializability,http://www.bailis.org/blog/linearizability-versus-serializability/)作为最严格的隔离级别,并且通过快照(Snapshot)之类的其他方式来支持较弱的隔离级别。
业务应用的优势
分布式SQL的四个关键优势,如下图所示。
1.让SQL和事务类的开发更具敏捷性
如今,
下一页
返回列表
返回首页
©2024 人工智能世界_专注人工智能领域,汇集人工智能技术资料 电脑版
Powered by iwms