海量 11 需求 逻辑复制性能优化

1 简介 1.1 目的 逻辑复制是一种在多个数据库实例之间复制数据的功能,通常用于从一个数据库实例中,将针对指定表的insert、delete、update等写操作,复制到其他另一个数据库实例。在数据库术语中,统一称逻辑复制的发送方为发布端,称接收方为订阅端。Oracle、Postgresql、Vastbase等数据库产品,均提供逻辑复制功能。 当前版本,逻辑复制性能较低,以tpcc场景为例,发布端40w tmpc时,订阅端的复制速度约10m/s。在滚动升级等场景,通过逻辑复制在不同实例间同步大量数据,要求逻辑复制性能达到70-100m/s。 发布端、订阅端均存在性能瓶颈,均需要优化。但是,由于交付时间较短,以及订阅端方案仍有瑕疵等因素,本版本交付发布端性能优化,下版本交付订阅端性能优化。 1.2 适用范围 本文主要用于向开发、测试等角色,介绍G100 3.0.9 psu2及之后版本,逻辑复制的性能优化的设计方向与使用方法。 1.3 术语定义、首字母缩写词和缩略语 发布端:逻辑复制场景,发送数据方。 订阅端:逻辑复制场景,接收数据方。 1.3 参考资料 Vastbase G100产品文档中逻辑复制使用介绍:https://docs.vastdata.com.cn/zh_CN/VastbaseG100/V3.0.8/1/f5c2ae8eb9744d429ad39c02438addf6 2 G100审计功能重构 2.1 功能简述 需求背景:逻辑复制使用 使用逻辑复制的流程如下: 发布端:配置逻辑复制 # 设置wal日志详细级别,设计身份等参数,重启集群 gs_guc set -D $PGDATA -c 'wal_level=logical' gs_guc set -D $PGDATA -h "host all all 0.0.0.0/0 md5" gs_guc set -D $PGDATA -h "host replication all 0.0.0.0/0 md5" vb_ctl restart -D $PGDATA 发布端:创建表 CREATE TABLE pt1(c1 INT,c2 TEXT); CREATE TABLE pt2(c1 INT, c2 TEXT); 发布端:创建发布,即指定哪些表需复制 CREATE PUBLICATION pub1 FOR TABLE pt1,pt2; 发布端:创建逻辑复制槽,用于存储复制状态等信息 ...

February 6, 2026 · 2 min · 298 words · Me

海量 透明加密 需求

1 简介 1.1 目的 透明加密特性提供数据加密功能,核心原理是在数据库将数据存储至磁盘时,先加密再存储。 本需求将从0设计透明加密特性,在保障功能、性能、易用性、可用性、可维护性、可扩展性等的前提下,让特性达到商用标准。 1.2 适用范围 Vastbase V5版本。 1.3 术语定义、首字母缩写词和缩略语 TDE:Transparent Data Encryption,透明数据加密,由数据库提供的数据加密特性 1.4 参考资料 oracle 透明加密特性:https://docs.oracle.com/en/database/oracle/oracle-database/26/dbtde/preface.html sql server 透明加密特性:https://learn.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-encryption?view=sql-server-ver17 oceanbase 透明加密特性:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004475958 kingbase 透明加密特性:https://docs.kingbase.com.cn/cn/KES-V9R1C10/safe/transparent-data-Encyption dm8 透明加密特性:https://eco.dameng.com/document/dm/zh-cn/pm/storage-encryption.html#7.1.1%20%E5%85%A8%E5%BA%93%E5%8A%A0%E5%AF%86 gaussdb 透明加密特性:https://support.huaweicloud.com/intl/zh-cn/fg-gaussdb-dist-v8/gaussdb-18-0019.html 2 透明加密 2.1 功能简述 一、基本原理 通常,用户将数据传输给数据库后,数据库将数据存储到磁盘。攻击者可能利用多种数据库内部或外部漏洞,例如操作系统漏洞等,绕过数据库安全机制,直接从磁盘读取数文件,窃取用户数据。 透明加密,是一种由数据库提供的加密特性,可有效解决攻击者从磁盘窃取数据的问题。开启透明加密后,数据库将数据存储到磁盘时,先加密数据,再存储数据密文;数据库从磁盘读取数据时,先解密数据密文,再进行其他计算。用户访问透明加密表时,包括存储、读取数据等,与访问普通表无任何区别,加密和解密过程由数据库自动完成,即对用户透明。 二、竞品分析 几乎所有商用关系数据库中,都支持透明加密特性,包括oracle, sql server, oceanbase, kingbase, dm8等,postgresql不支持透明加密特性。 使用透明加密时,通常包括3个阶段: 定义用于加密的密钥 使用SQL语法,定义哪些对象需加密,不同产品,定义加密对象的粒度不同 使用SQL语法,访问透明加密表,以及进行其他运维等操作 各产品中,定义加密对象的SQL语法如下: -- 一、oracle CREATE TABLE t1(c1 INT, c2 TEXT ENCRYPT); CREATE TABLESPACE ts1 DATAFILE .. ENCRYPTION USING 'AES192' ENCRYPT; -- 二、sql server CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 .. ALTER DATABASE db1 SET ENCRYPTION ON; -- 三、oceanbase CREATE TABLESPACE ts1 encryption = 'y'; -- mysql cmpt CREATE TABLESPACE ts1 ENCRYPTION USING 'aes-256'; -- oracle cmpt -- 四、kingbase CREATE TABLESPACE ts .. WITH (ENCRYPTION = TRUE); CREATE TABLE ts .. ENCRYPTED BY 'this is a key'; -- 五、dm8 intdb .. ENCRYPT_NAME .. CREATE TABLESPACE .. ENCRYPT WITH .. CREATE TABLE t1 (c1 INT, c2 INT ENCRYPT WITH ..); -- 六、gaussdb CREATE TABLE t1 .. WITH (enable_tde=on); 各产品中,按定义加密对象的粒度,区别如下: ...

March 20, 2026 · 5 min · 916 words · Me

海量 mac 需求

1 简介 1.1 目的 本文主要包括以下关键内容: 介绍访问控制的基本概念 调研其他厂商实现强制控制的方式 设计Vastbase强制访问控制特性,介绍如何使用强制访问特性 1.2 适用范围 Vastbase V5版本。 1.3 术语定义、首字母缩写词和缩略语 MAC:Mandatory Access Control,强制访问控制,主体访问客体时,基于主体、客体属性,强制控制访问权限。 DAC:Discretionary Access Control,自主访问控制,数据拥有者可自行设置访问权限。 1.4 参考资料 oracle 强制访问控制(标签访问控制 RLS):https://docs.oracle.com/en/database/oracle/oracle-database/26/olsag/part1.html#GUID-C20C62AE-2A30-45F9-AEEA-52A0D3286FBA oceanbase 强制访问控制(兼容oracle):https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004475944 kingbase 强制访问控制:https://bbs.kingbase.com.cn/kingbase-doc/v8.6.7.24/safety/safety-guide/label-and-mac.html dm 强制访问控制:https://eco.dameng.com/document/dm/zh-cn/pm/mandatory-access-control.html GB/T-20009-数据库管理系统安全评估准则:https://drive.weixin.qq.com/s?k=AHUAfwdSAA82aDcvvD postgresql 行级访问控制 RLS:https://www.postgresql.org/docs/current/ddl-rowsecurity.html 2 强制访问控制 2.1 功能简述 一、基本概念 访问控制的定义:对主体访问客体的行为,系统按照安全策略进行限制与管理的安全机制。 按安全策略分类,可将访问控制分为很多类,其中,常见的策略有: 自主访问控制DAC:客体的拥有者,可自行向其他主体赋予访问权限。 强制访问控制MAC:系统为主体、客体分配安全标签,通过主体、客体的安全标签控制访问权限,很多情况下,即使客体的拥有者也无法向其他主体赋予访问权限。 角色访问控制RBAC:不在本文讨论范围。 在数据库领域,主体通常指数据库用户,客体通常指数据库对象,例如DATABASE、SCHEMA、TABLE、COLUMN、ROW、FUNCTION等。 自主访问控制比较成熟,几乎所有关系数据库,都提供自主访问控制特性,例如,TABLE(客体)的属主(主体),可通过GRANT .. TO ..等语法,为其他用户(主体)赋予权限。 强制访问控制理论比较成熟,但是,除oracle支持强制访问控制,以及oceanbase等几款产品兼容oracle强制访问控制之外,大部分关系数据库不支持强制访问控制。 实现强制访问控制时,通常将主体、客体的安全标签,简化为安全等级,当主体访问客体时,比较主体、客体等级高低,以判断访问权限。在机密性场景,遵循不上读、不下写原则。在完整性场景,遵循不下读、不上写原则。 本需求将从0设计强制访问控制特性,在保障功能、性能、易用性、可用性、可维护性、可扩展性等的前提下,让特性达到商用标准。 二、竞品分析 oracle支持强制访问控制,客体是ROW,即行级强制访问控制。oceanbase、kingbase、dm的访问控制,与oracle一致。sql server、postgresql等其他产品不支持强制访问控制。 oracle强制访问控制使用示例如下: -- 1 定义策略 SA_SYSDBA.CREATE_POLICY(policy_name => 'p1', column_name => 'lab_col1') -- 2 定义级别 SA_COMPONENTS.CREATE_LEVEL(policy_name => 'p1', level_num => 1, short_name => 'x1', long_name => 'x1'); SA_COMPONENTS.CREATE_LEVEL('p1', 20, 'x2', 'x2'); SA_COMPONENTS.CREATE_LEVEL('p1', 30, 'x3', 'x3'); -- 3 定义组件 SA_COMPONENTS.CREATE_LEVEL(policy_name =>'p1', comp_num => 100, short_name => 'sec', long_name => 'security'); SA_COMPONENTS.CREATE_LEVEL('p1', 200, 'stg', 'storage'); -- 4 创建标签 SA_SYSDBA.CREATE_LABEL(policy_name => 'p1', label_tag => 'sec_normal', label_value => 'x1:security', data_label => TRUE); SA_SYSDBA.CREATE_LABEL('p1', 'sec_leader', 'x3:security', false); -- 5 为主体设置属性 SA_USER_ADMIN.SET_LEVELS(policy_name => 'p1', user_name => 'user1', max_level => 'x2', min_level => 'x1', default_level => 'x1', row_level => 'x1'); SA_USER_ADMIN.SET_COMPARTMENTS(policy_name => 'p1', user_name => 'user1', read_comps => 'sec', write_comps => 'sec', default_comps => 'sec', row_comps => 'sec'); -- 6 为客体设置属性 CREATE TABLE t1(c1 INT); SA_USER_ADMIN.APPLY_TABLE_POLICY(policy_name=> 'p1', shema_name => 's1', table_name => 't1', table_options => 'READ_CONTROL, WRITE_CONTROL, CHECK_CONTROL', label_function => 'f_create_t1_label(level, comp)'); -- 7 插入数据(主动定义标签) INSERT INTO t1 (c1, lab_col1) VALUES (1, CHAR_TO_LABEL('p1', 'x1:sec')); 三、实现思路 在数据库领域,除oracle外,没有其他可借鉴的方案。oracle的设计,太复杂,易用性太低。 本需求将参考oracle的思想,简化oracle设计。 ...

March 23, 2026 · 6 min · 1130 words · Me

海量 15 需求 逻辑复制性能优化

1 简介 1.1 目的 逻辑复制是一种在多个数据库实例之间复制数据的功能,通常用于从一个数据库实例中,将针对指定表的insert、delete、update等写操作,复制到其他另一个数据库实例。在数据库术语中,统一称逻辑复制的发送方为发布端,称接收方为订阅端。Oracle、Postgresql、Vastbase等数据库产品,均提供逻辑复制功能。 当前版本,逻辑复制性能较低。以tpcc场景为例,发布端40w tmpc时,产生wal日志速度约100+m/s,订阅端的复制速度约10+m/s。在滚动升级场景,主机和备机可能是不同的产品版本,主备复制数据时,不能使用物理复制,只能使用逻辑复制。在长存客户场景中,主机产生wal日志速度在50+m/s左右,备机使用逻辑复制,复制速度约10+m/s,备机将追赶不上主机进度,导致滚动升级失败。 主a 备b 备c +-----------------------+---------------------------+----------------------------- |1 ==>执行业务 |2 开始滚动升级,暂停流复制 lag=400M |3 暂停流复制(物理复制) |4 创建逻辑复制槽 lsn1=1G |5 恢复流复制 |6 物理复制追赶,到逻辑复制槽 |6 开始单节点升级 |7 [升级] 停止进程 |8 [升级] 替换二进制等 |9 [升级] 启动进程 |10 单节点升级成功 |11 持续执行业务 lsn2=2G |12 创建订阅,启动逻辑复制,lsn1=1G |13 逻辑复制开始追赶(初始差距:lsn2-lsn1) |14 持续执行业务 lsn3=2.5G |15 逻辑复制持续追赶 lsn=1.6G |16 (可重置lag) |17 差距持续缩小(从lsn2-lsn1降低到lag) |18 发送停机命令 |19 停止业务 |20 差距持续缩小,从lag缩小至0 |21 停止进程成功 因此,需大幅提高逻辑复制速度,在长存客户场景中,逻辑复制速度至少需达到70+m/s。目前,发布端、订阅端均存在性能瓶颈,均需要优化。 1.2 适用范围 G100 3.0.9 psu2及之后版本 1.3 术语定义、首字母缩写词和缩略语 发布端:逻辑复制场景,发送数据方。 订阅端:逻辑复制场景,接收数据方。 1.4 参考资料 Vastbase G100产品文档中逻辑复制使用介绍:https://docs.vastdata.com.cn/zh_CN/VastbaseG100/V3.0.8/1/f5c2ae8eb9744d429ad39c02438addf6 oracle goldengate并行复制:https://oracle.hydrogen.sagittarius.connect.product.adaptavist.com/en/database/goldengate/core/26/coredoc/replicat-parallel-replicat.html#GUID-F1CD8E03-8DA1-4A78-95D3-C0516F1DA09A 2 逻辑复制性能优化 2.1 功能简述 一、逻辑复制使用示例 使用逻辑复制,可概括为3个阶段: ...

May 6, 2026 · 4 min · 715 words · Me
心情不好的时候可以点一下 🐱
×
🤖 Doubao AI ×
Hi! 我是你的技术助手。关于代码、架构或 Bug,随时问我!🚀