本文介绍全球数据库网络(Global Database Network,简称GDN)的核心优势。
基于PolarDB-X的主从复制能力,GDN融合了丰富的产品功能,提供简单易用、稳定可靠的使用体验。
多模态DML
大部分的GDN流量是DML流量。针对DML类型的数据复制,GDN提供多种可选的复制策略,以满足不同场景下对数据一致性和性能的不同需求。详细信息可参考DML复制。此外,PolarDB-X提供的主从复制在数据库内核层面可以提供更多优化,比如:
PolarDB-X支持多种类型的数据分区规则,例如一级分区、二级分区、Hash分区、Range分区、List分区等。对于分区表进行数据写入时,SQL中需要携带分区列才能有效地命中分区,实现高效写入。GDN数据复制能够在内核层面更直接地识别分区规则并感知分区规则的变化,从而更加稳定可靠。
PolarDB-X支持TTL类型的数据表。一旦数据到期,系统将自动删除过期数据。这种删除操作会在全局Binlog中批量产生大量的delete事件。复制这些delete事件会占用大量网络带宽,尤其在异地复制场景下,可能会导致复制延迟增加。然而,在GDN场景下,这些delete事件实际上并不需要复制到从集群。从集群的TTL调度器可以自行触发删除。因此,PolarDB-X支持对TTL触发产生的delete事件进行打标,从而在GDN复制链路中忽略这些被打标的事件,避免不必要的数据复制。
全镜像DDL
PolarDB-X是兼容MySQL生态的分布式数据库。在数据库对象的管理方面,它提供了高度兼容MySQL语法的DDL SQL,并且还包含许多自定义的数据库对象类型和DDL语法。相比之下,PolarDB-X更为丰富和强大。举例来说:
// 创建全局二级索引
CREATE GLOBAL INDEX g_i_pk_type ON gsi_primary_table (id) COVERING (c_tinyint_1)
DBPARTITION BY HASH(id) TBPARTITION BY HASH(id) TBPARTITIONS 3;
// 修改全局二级索引
ALTER INDEX gsi_lc ON TABLE t1
ADD PARTITION (PARTITION p2 VALUES IN ((11, 11), (10, 10)));
// 列存索引
ALTER TABLE t_order ADD CLUSTERED COLUMNAR INDEX `g_i_buyer` (`buyer_id`)
partition by hash(`buyer_id`) partitions 16 COMMENT 'CREATE CCI TEST';
// TTL & 本地分区LOCAL PARTITION
CREATE TABLE t1 (
c1 bigint,
c2 bigint,
c3 bigint,
gmt_modified DATETIME PRIMARY KEY NOT NULL
) PARTITION BY HASH(c1) PARTITIONS 4 LOCAL PARTITION BY RANGE (gmt_modified)
INTERVAL 1 MONTH EXPIRE AFTER 12 PRE ALLOCATE 6 PIVOTDATE NOW();
// 定义分区级别的Locality属性
CREATE TABLE l0 (
x int PRIMARY KEY AUTO_INCREMENT,
y int,
INDEX `auto_shard_key_y` USING BTREE(`Y`)
) DEFAULT CHARSET = `utf8mb4` DEFAULT COLLATE = `utf8mb4_general_ci`
PARTITION BY LIST COLUMNS (y) (
PARTITION p1 VALUES IN (0, 1, 2, 3) LOCALITY 'dn=xdevelop-240613031956-9e47-629h-dn-1',
PARTITION p2 VALUES IN (4, 5, 6, 7) LOCALITY 'dn=xdevelop-240613031956-9e47-629h-dn-0',
PARTITION p3 VALUES IN (10, 20, 30, 40) LOCALITY 'dn=xdevelop-240613031956-9e47-629h-dn-1'
);
// 分区迁移,变更对象Locality属性
ALTER TABLE special_dml_test1
MOVE PARTITIONS (p2, p4, p6, p8) TO 'xdevelop-240613031956-9e47-629h-dn-0';
DDL的复制并不仅仅是简单地从主集群的Binlog中提取DDL SQL,然后直接提交给从集群执行。实际上,该过程涉及到兼容性、一致性、稳定性和可用性等多重挑战。PolarDB-X内置的复制能力在内核层封装了这些复杂性,并提供了高效易用的DDL复制能力。举例如下:
高度的兼容性
与使用其他同步工具实现PolarDB-X间的数据复制相比,一体化的原生复制技术无任何SQL兼容问题,无需担心跨产品、跨版本的兼容性问题,能够更有效地确保数据复制的正确性和稳定性。此外,原生内核级复制还能更方便地识别SQL语义和透传附加信息,实现针对性的处理和优化。例如,及时调整DML SQL的生成规则,识别出Locality类型的DDL将SQL中的DN信息剔除或替换为从集群对应的DN id,以及识别出列存类型的DDL后做针对性的SQL改写等。
可异步执行的DDL
数据复制链路中,耗时较长的DDL操作可能会导致长时间阻塞和较高的数据延迟,这在数据复制领域是一个普遍存在的问题。在分布式数据库场景下,对超大规模的数据表执行DDL操作所需的时间可能更长,由此引发的阻塞和延迟问题也更为严重。实际上,在一般情况下,许多类型的DDL操作都是可以完全异步执行的,比如
analyze table
、alter table add index
、alter table change partition definition
等操作。通过一体化的原生复制技术,可以在内核层面实现自闭环且高效的异步DDL处理,甚至可以在主从集群之间实现可联动的两阶段DDL处理,从而实现各种类型的DDL操作的“零阻塞”。一致性的DDL复制
在基于多流Binlog构建GDN数据复制链路时,对于DDL复制需要考虑不同复制链路之间的协调一致。每条复制链路在收到某条DDL SQL后必须等待其他复制链路,只有当所有链路都收到该DDL SQL之后,才可以将DDL操作复制给从集群。否则将导致DML流量和Schema之间的不一致,引发异常或数据错误。GDN在内核层内置了分布式一致性DDL处理引擎,无需增加任何运维成本,轻松实现多流DDL复制。
轻量级双向复制
PolarDB-X主从复制提供了兼容MySQL的轻量级双向复制能力,可以基于server_id
进行回环流量过滤。其采用直接基于Binlog event header中的server_id
进行流量过滤的方式,相比其他同步工具一般通过事务表进行流量过滤的方案更为轻量,无额外的性能损耗且具有更好的扩展性。目前,GDN仅支持在控制台配置单向主从同步,如有双向同步需求,请提交工单进行协助。
高效数据对账
GDN本身支持数据对账能力,使用方法参见主从实例数据校验,内置的数据校验能力具备如下优势:
支持多种校验模式
直接校验:基于主从实例的最新数据进行校验,该校验方式在增量变更很频繁的情况下,会出现误差,需要多轮复核或配合人工校验进行处理。
快照校验:PolarDB-X支持基于全局授时服务(TSO)的快照查询,全局Binlog支持保证线性一致的Sync Point,GDN基于这两个基础能力,可构建保证主从集群之间数据一致的TSO-MAPPING并基于此TSO进行快照查询并实现数据校验,该校验方式基于一致性快照进行校验,无误差,具备更好的易用性。
数据校验采用了资源占用低和校验速度快的checksum校验以及逐条数据明细对比相结合的方式。首先,采用采样算法对数据进行区间划分,然后优先对比每个区间数据的checksum。仅当checksum不一致时,再转换为逐条数据明细校验。相较于传统的直接逐条数据明细对比校验,这种方式可以实现10倍性能提升,并且对资源的占用更低。
一体化运维
GDN封装了主从集群之间数据复制的细节,提供了简单易用的使用体验。通过登录PolarDB分布式版控制台,您可以实现GDN的一键开通、一键配置主从同步、一键移除从实例、一键主从切换等操作。具体操作方法请参考相关操作指引。