热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

阿里云DRDS:分布式数据库服务

最近在做阿里云相关的项目,用到阿里的很多接口服务的API,于是想把这段项目做个总结,顺便梳理下阿里云的云计算的相关知识点。DRDS:分布式数据库服务。1.相关术语DRDS(Dist

最近在做阿里云相关的项目,用到阿里的很多接口服务的API,于是想把这段项目做个总结,顺便梳理下阿里云的云计算的相关知识点。

DRDS:分布式数据库服务。

1.相关术语

DRDS(Distribute Relational Database Service),分布式关系型数据库服务:分布式数据库服务,基于rds,提供分库分表功能。

DrdsInstance(Distribute Relational Database Instance),分布式数据库实例:一个独立占用物理内存的分布式数据库服务进程,可以有不同的规格,规格会决定该实例的性能(包含IOPS、连接数)。

DrdsInstanceId(Distribute Relational Database  Instance ID),分布式数据库实例名:实例名可标识一个实例的名称,全局唯一。

DrdsDB(Distribute Relational Database),分布式数据库:Drds数据库是在一个实例下创建的逻辑单元,一个实例可以创建多个数据库,在实例内数据库命名唯一,所有数据库都会共享该实例的资源。

DrdsDBName(Distribute Relational Database  Name),分布式数据库名:标识每个分布式DB的名称,在一个实例范围内,数据库名惟一。

DrdsDBAccount(Distribute Relational Database  Accoun),分布式数据库帐号/帐号:帐号是标识数据库的访问权限,目前一个数据库对应一个帐号,一个帐号关联一个数据库。

2.DRDS产品简介

2.1 DRDS产品概要:

单机数据库能够方便的满足用户对于关系查询类的需求,是目前业务应用中最常使用的软件。然而,对于很多应用而言,单机数据库最终都会碰到单机性能上的天花板,在TPS(系统吞吐量)/QPS(每秒查询率)/内存容量/磁盘容量等等一系列系统资源上会碰到各类限制。DRDS的主要目标,就是帮您解决这方面的各类问题,他主要提供了两个功能:读写分离和数据库切分。

读写分离,能够允许您实现一台机器写入,多台机器读取,这对于读多写少的应用,能够以极低的成本解决系统的瓶颈。

数据库切分是一个解决系统存储瓶颈的最终极解决方案,数据库切分的核心思想其实很简单,就是分而治之。将数据分散到多台机器,并保证请求能够平均的分发到这些机器上,就可以以极低的成本来解决业务的各类性能瓶颈。

当然,切分也是有代价的,最明显的代价就是,分布式数据库会对一些原有单机数据库的场景进行限制,因为这些操作,在分布式环境下的延迟或效率非常低效,就算是能够实现出来,也会因为性能问题而无法使用。

针对这类问题,阿里的中间件团队曾经成功的协助过近300个业务应用系统实现了数据库的切分,因此,我们在这个领域内积累了大量的实战经验和成熟的产品,希望这类产品也能够为您提供相同的服务,让您的数据库再也不必担心性能问题。

2.2DRDS与MySQL兼容性:

支持点:

DRDS支持90%以上MySQL sql,包括常用的insert/update/replace,select/join/union/subquery/exist等各种语法+条件组合

DRDS抽象出21种数据类型,int/float/double/long/decimal/data/time/datetime/timestamp/bit/bits...

DRDS兼容MySQL 80%的函数实现,主要包括:数学、字符串、时间

DRDS支持map/reduce计算模型

DRDS支持函数的二次计算,如如count(id) + 1 , sum(pv)/count(person)

DRDS支持跨库join的函数计算,比如select count(*)+1 from a join b on a.id = b.id.

DRDS支持特殊类型计算,比如count(distinct id).

DRDS支持跨数据节点join(分布式join)

DRDS支持跨数据节点多重嵌套子查询

DRDS支持多种并行执行模式

目前不支持:

不支持group by/order by 列为函数列且不存在与select列中

不支持join列为函数计算,比如on.id=b.id+1

DRDS server未开放DDL支持,只能在控制台做DDL

不支持复杂update/delete语句(比如update多表,有join等)

不支持强一致分布式事务

2.3 数据水平拆分

DRDS帮助您实现分库分表,能够将原来只能在单节点执行的SQL,转变为多节点执行的SQL,如同单个数据库体验。通过支持系统实现数据存储的动态水平扩展,目前DRDS在公司内已经有超过几百个应用系统使用超过5年,高效安全且稳定。

但是分布式数据库和单机数据库本身必然会存在一定的使用习惯上的不同,例如低效的分布式事务、分布式join等,针对这些问题,DRDS的选择是:优先考虑性能和稳定性,兼顾软件的兼容性。

与市面上的一些开源的数据库切分工具相比,DRDS能够更智能的分析您的SQL,在结果集合并和分布式join优化等关键领域,我们都有成熟解决方案,能够帮您解决在分布式数据库场景中面临的大部分问题。

2.4 平滑扩容

DRDS能够帮助用户实现在线的数据库平滑扩容,让用户能够按需的***增减数据库,从而实现弹性按需使用数据库集群。

在线数据库扩容的重点在于“在线”两字,也就是用户不需要停止业务系统进行割接操作,直接就可以添加新的RDS节点到集群中,实现无缝的***扩展。DRDS则将整个扩容的过程分为几个阶段,包括全量迁移,增量同步,切换数据库等几个步骤。数据会提前进行搬迁,并进行增量并行同步一段时间,因此,我们可以在非常短的时间内(秒级别)完成数据库的最终扩容切换工作,对您的业务没有影响。

2.5 小表广播

在一些大的业务表进行了切分后,总会存在一些表的数据量不大,更新量也不大的原始信息表。这些表往往会与我们的切分后大表进行join操作。这种操作物理上就会造成分布式join查询,效率从整体上会比较低下。

针对这种分布式join的场景,我们开发了OETL 专用工具来帮您进行小表广播,将原信息表的所有数据(包括增量更新)全部自动的广播到大表的机器上,这样,就可以让原来的分布式查询变成单机本地查询了。

2.6  全局唯一ID

在分布式环境下,原有的mysql sequence生成机制无法高效的生成全局唯一的sequence.我们借鉴了oracle的sequence生成样例,实现了一个在mysql基础上的高效sequence生成器,能做到没有单点性能瓶颈,具备大并发获取和低延迟特性。

DRDS sequence功能的目标只是为了保证数据的全局唯一,虽然基本上是按时间序列获取的,但并不全局有序。


推荐阅读
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
  • 本文介绍了在MySQL8.0中如何查看性能并解析SQL执行顺序。首先介绍了查询性能工具的开启方法,然后详细解析了SQL执行顺序中的每个步骤,包括from、on、join、where、group by、having、select distinct、union、order by和limit。同时还介绍了虚拟表的概念和生成过程。通过本文的解析,读者可以更好地理解MySQL8.0中的性能查看和SQL执行顺序。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 先看一段错误日志:###Errorqueryingdatabase.Cause:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransie ... [详细]
  • 小程序wxs中的时间格式化以及格式化时间和date时间互转
    本文介绍了在小程序wxs中进行时间格式化操作的问题,并提供了解决方法。同时还介绍了格式化时间和date时间的互相转换的方法。 ... [详细]
author-avatar
平凡洗护店
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有