SQL Server feature:Change Data Capture(CDC) and Change Tracking

OLTP到Data Lakehouse:构建实时可信分析底座 Data Lakehouse是一种融合数据湖弹性与数据仓库治理能力的现代数据架构,其核心原理在于通过开放表格式(如Delta Lake、Iceberg)在对象存储上实现ACID事务、流批一体和Schema演化。技术价值体现在解耦存储与计算、支持Time Travel回溯、保障跨引擎一致性,并天然适配实时分析、BI报表与机器学习等多元场景。尤其当传统OLTP系统面临分析性能瓶颈时,Lakehouse可作为轻量级‘数据翅膀’,通过CDC捕获变更、分层建模(Bronze/Silver/Gold)构建可信链路,避免 阅读详情

 

Change Data Capture(CDC):

1. 概述

CDC 为数据仓库做数据抽取(ETL)提供了一个很好的捕获源数据(Source Data)数据变化的方案,它记录了SQL Server数据表所有的insert, update 和delete操作。

CDC是从SQL Server的log里获取表数据的变化,然后记录变化的数据到相关联的change table里。用相关的函数即可查看这些变化。下图显示了利用CDC进行ETL的Data flow,可以看到数据流是从source table -> CDC chagne table -> ETL -> DW.

 

2. 概念

2. 概念

1)CDC Capture Instance(捕获实例)

要对一张数据表进行变化数据捕捉,首先要打开DB和表的CDC配置,即要enable CDC on database and the source table,当一张source table的CDC配置打开后,SQL Server会为这张表建一个相关的Capture Instance来监视source table的数据变化。

Capture Instance包含一张change table和最多2个查询函数(query function, a function returned a data set). 这些信息可以从下面这些视图(view)中查到:cdc.change_tables, cdc.index_columns, and cdc.captured_columns。

与Capture Instance相关的对象都创建在cdc schema下,默认实例名为源表的<schema name_table name>,change table名字为<schema name_table name>_CT, 数据变化查询函数为fn_cdc_get_all_changes_<schema name_table name>。

2)CDC变化表(CDC change table)

Change Table的每一行包含了一些附加信息用来翻译该行数据,这些信息有。

             __$start_lsn标识出和这个change相关的SQL Server日志的LSN(the commit log sequence number (LSN),The commit LSN both identifies changes that were committed within the same transaction, and orders those transactions.)。

             __$seqval 用来对同一个transaction里发生的change进行排序。

             __$operation 记录变化的操作:1 = delete, 2 = insert, 3 = update (before image), and 4 = update (after image).

             __$update_mask 是由所有被Capture列组成的一个二进制为掩码(bit mask with one defined bit for each captured column)。

Change Table其他列为source Table中被Capture变化的列的一个镜像copy。

Change Table记录了源表(source Table)的所有Insert,delete和update操作时的数据变化。Insert操作记录Insert的数据;delete操作记录delete前的数据;update操作记录update前后的数据,因此有2条数据。(我测试只有一条数据,疑惑中.......)

 

3. CDC配置

 

Step 1:  数据库配置. Enable CDC for a database.

执行procedrue sys.sp_cdc_enable_db允许数据库CDC feature。(run procedrue sys.sp_cdc_enable_db to enable the database for cdc). To  determine if a database is already enabled, query theis_cdc_enabled column in thesys.databases catalog view.

E.g.

USE MyDB
GO

EXEC sys.sp_cdc_enable_db
GO

 

Step 2: Enable CDC for a table.(此处没有包含网络变化的配置(net chagne,以后编辑的时候加进来,相关配置也很简单)

After a database has been enabled for change data capture, members of the db_owner fixed database role can create a capture instance for individual source tables by using the stored proceduresys.sp_cdc_enable_table. To determine whether a source table has already been enabled for change data capture, examine theis_tracked_by_cdc column in the sys.tables catalog view.

The following options can be specified when creating a capture instance:

Columns in the source table to be captured.

By default, all of the columns in the source table are identified as captured columns. If only a subset of columns need to be tracked, such as for privacy or performance reasons, use the@captured_column_list parameter to specify the subset of columns.

A filegroup to contain the change table.

By default, the change table is located in the default filegroup of the database. Database owners who want to control the placement of individual change tables can use the@filegroup_name parameter to specify a particular filegroup for the change table associated with the capture instance. The named filegroup must already exist. Generally, it is recommended that change tables be placed in a filegroup separate from source tables. See theEnable a Table Specifying Filegroup Option template for an example showing use of the@filegroup_name parameter.

 

E.g.

USE MyDB
GO

EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name   = N'MyTable',
@role_name     = N'MyRole',
@filegroup_name = N'MyDB_CT',
@supports_net_changes = 1
GO

The purpose of the named role is to control access to the change data. The specified role can be an existing fixed server role or a database role. If the specified role does not already exist, a database role of that name is created automatically. Members of either the sysadmin or db_owner role have full access to the data in the change tables. All other users must have SELECT permission on all the captured columns of the source table. In addition, when a role is specified, users who are not members of either the sysadmin or db_owner role must also be members of the specified role.

If you do not want to use a gating role, explicitly set the @role_name parameter to NULL.

 

4. CDC数据使用

CDC记录的所有变化数据都是通过函数cdc.fn_cdc_get_all_changes_<capture instance>来查看,这个函数需要一个最大和最小的sql log的序列号(LSN, Log Sequence Number),这2个值分别通过函数sys.fn_cdc_get_max_lsn和sys.fn_cdc_get_min_lsn得到。函数sys.fn_cdc_map_time_to_lsn和sys.fn_cdc_map_lsn_to_time可以返回一段时间内的最大/最小LSN或者根据LSN确定log记录的时间。

E.g

-- create database and table

create database test;

go

use test;

go

create table bcd ( b int, c varchar(10), d datetime)

go

 

-- enable cdc

EXEC sys.sp_cdc_enable_db

GO

EXEC sys.sp_cdc_enable_table

@source_schema = N'dbo',

@source_name = N'bcd',

@role_name = NULL,

@supports_net_changes = 0

GO

-- insert one data, then update it

insert into bcd (b,c,d) values (3, 'c', getdate())

update bcd set c = 'c updated' where b = 3

go

-- Check cdc data

DECLARE @from_lsn binary(10),  @to_lsn binary(10)

SET @from_lsn = sys.fn_cdc_get_min_lsn('dbo_bcd')

SET @to_lsn = sys.fn_cdc_get_max_lsn()

 

SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_bcd (@from_lsn, @to_lsn, N'all')

SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_bcd (@from_lsn, @to_lsn, N'all update old')

 

-- the 2nd way to get LSN when checking CDC data

DECLARE @begin_time datetime,

               @end_time datetime,

               @begin_lsn binary(10),

                    @end_lsn binary(10);

SET @begin_time = '2011-01-01 00:00:00.000', @end_time '2011-01-02 00:00:00.000';

SELECT @begin_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than', @begin_time);

SELECT @end_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time);

 

SELECT * FROM cdc.fn_cdc_get_net_changes_HR_Department(@begin_lsn, @end_lsn, 'all');

SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_bcd (@from_lsn, @to_lsn, N'all update old')

查询结果中有个一个__$update_mask列,这是一个位掩码,每一列用一个bit来表示,要想知道source table里的某列是否被修改,可以通过函数sys.fn_cdc_is_bit_set 和sys.fn_cdc_get_column_ordinal组合使用来实现,例子如下:

SELECT *,

             sys.fn_cdc_is_bit_set( sys.fn_cdc_get_column_ordinal('dbo_bcd','b'), __$update_mask),

             sys.fn_cdc_is_bit_set( sys.fn_cdc_get_column_ordinal('dbo_bcd','c'), __$update_mask),

             sys.fn_cdc_is_bit_set( sys.fn_cdc_get_column_ordinal('dbo_bcd','d'), __$update_mask)

FROM cdc.fn_cdc_get_all_changes_dbo_bcd (@from_lsn, @to_lsn, N'all')

 

机器学习落地架构:端到端流水线设计与工业级实践 机器学习解决方案架构(ML Solution Architecture)是AI工程化落地的核心骨架,它超越单一模型训练,聚焦数据流动、特征治理、模型生命周期与服务可观测性的系统性协同。其本质是将学术范式的静态建模,转化为工业场景下的持续交付能力——通过数据契约保障输入一致性,Feature Store消除训练-推理偏差,MLflow实现模型可复现与灰度可控,KServe提供弹性服务与实时监控。该架构显著提升AI系统的稳定性、可审计性与跨团队协作效率,广泛应用于金融风控、智能推荐、预测性维护等需高可靠、强合规 阅读详情

相关推荐

2026年数据集成趋势:从批处理到实时事件驱动的架构演进

数据集成是构建现代数据架构的核心环节,其核心原理在于实现不同数据源之间的高效、可靠连接与同步。传统批处理模式依赖周期性任务,存在固有延迟,难以满足业务对实时性的需求。随着CDC(变更数据捕获)和流处理技术的成熟,实时事件驱动架构正成为技术演进的主流方向,其技术价值在于将数据集成从被动搬运转变为主动响应,极大提升了业务敏捷性与决策时效性。在电商实时推荐、金融风控等应用场景中,毫秒级的数据流动已成为关键竞争力。本文聚焦于如何利用CDC、流处理框架等技术,构建能够感知和驱动业务事件的实时数据管道,这正是实现从批处

weixin_30697239的博客 439

SqlServer Change Data Capture CDC使用手册

什么是变更数据捕获 (CDC)?变更数据捕获(Change Data Capture ,简称CDC)记录 SQL Server 表的插入、更新和删除活动。使用变更数据捕获可以更有效跟踪表对象DML历史操作,对 ETL 等数据转移也非常有用。变更数据捕获适用版本:SQL Server 2008 以上的 Enterprise Edition、Developer Edition 和 Evaluation Edition变更数据捕获原理:变更数据捕获的更改数据源为 SQL Server 事务日志。

情绪不稳定的98年程序员 3212

机器学习应用小时级交付:轻量化MLOps实战路径

机器学习应用开发已从算法研究迈入工程落地阶段,核心挑战在于模型服务化与业务集成——即如何将训练好的模型快速、稳定、可控地嵌入真实业务系统。其底层原理依赖模块化架构、成熟工具链复用与严格工程规范,技术价值体现在大幅压缩交付周期、降低运维复杂度、提升业务响应敏捷性。典型应用场景包括CRM智能插件、SaaS实时推荐、IoT设备预测看板等需快速验证的轻量级AI需求。本文聚焦MLOps轻量化实践与模型服务化(Model Serving)两大关键热词,提供可复用的乐高式组装方法论,不依赖Kubernetes或全栈MLO

chengyixian7877的博客 375

SQLSERVER|CDC日志变更捕获机制

一、什么是CDC? 变更数据捕获(Change Data Capture ,简称 CDC)记录 SQL Server 表的插入、更新和删除活动。SQLServer的操作会写日志,这也是CDC捕获数据的来源。 开启cdc的源表在插入、更新和删除活动时会插入数据到日志表中。cdc通过捕获进程将变更数据捕获到变更表中,通过cdc提供的查询函数,我们可以捕获这部分数据。 二、开启CDC 2.1...

羽之大公公的博客 1328

ML工程师不是调参员:从模型到可靠服务的工程化实战

机器学习工程(MLE)本质上是将算法能力转化为稳定、可观测、可维护的生产级系统的能力。它根植于软件工程范式——强调可测试性、可监控性、可回滚性,同时叠加数据工程与模型生命周期管理的双重复杂性。其核心价值不在于模型前沿性,而在于保障端到端预测服务的可靠性、低延迟与业务一致性。典型应用场景包括实时风控、个性化推荐、智能客服等对SLA敏感的线上系统,其中特征管道稳定性、模型热更新、漂移检测与灰度发布构成关键能力支柱。本文聚焦工业级ML工程落地中的真实挑战与解法,覆盖Flink实时特征计算、Triton模型服务优化

weixin_34013044的博客 321

【信息科学与工程学】【数据科学】第五十一篇 数据仓库00 基础设计01

数据仓库设计的系统性解决方案,涵盖架构模式、分层设计、百万级访问支撑、海量数据配置及与数据库/数据湖的对接策略: ​​ODS(操作数据层)​​:原始数据镜像,保留历史快照 ​​DWD(明细数据层)​​:清洗、标准化、维度退化 ​​DWS(汇总数据层)​​:主题宽表、轻度聚合 ​​ADS(应用数据层)​​:高度聚合,面向报表/API ​​二、百万用户访问架构设计​​ ​​1. 核心架构组件​​ ​​2. 关键配置参数(以Snowflake为例)​​ ​​3. 性能优化措

weixin_49199313的博客 1202

kettle 导入资源库失败 There was an error while inporting repositry object from an XML file

kettle 导入资源库失败 There was an error while inporting repositry object from an XML file

qq_41464008的博客 743

CDC(Change Data Capture)增量抽取

基于oracle CDC增量捕获数据,抽取数据,达到增量铺货数据

CDC(变化数据捕获)同步技术详解

一、CDC(ChangeDataCapture)变化数据捕获概念 1、变化数据捕获简称CDC,抽取处理需要重点考虑增量抽取,假设一个数据仓库系统,在每天夜里的业务低峰时间从操作型源系统抽取数据,那么增量抽取只需要过去24小时内发生变化的数据。 注意:当你能够识别并获得最近发生变化的数据时,抽取及其后面的转换、装载操作显然都会变得更高效,因为这样需要处理的数据量就会少很多。 二、CDC(...

qq30211478的博客 2万+

ICG cell如何通过Latch结构消除与门clock gating中的glitch?

本文深入解析了ICG Cell如何利用Latch结构解决传统与门时钟门控中的毛刺问题。通过将电平敏感锁存器与门控与门结合,ICG Cell将使能信号的变化严格限制在时钟低电平的安全窗口内采样和锁存,从而在时钟有效沿期间提供稳定的控制信号,从根本上消除了因信号延迟不同步而产生的glitch,确保了门控时钟的纯净与电路功能的可靠性。

weixin_29234423的博客 468

Clang Static Analyzer 使用教程:本地 + CMake + GitHub Actions 自动静态分析实战

本文介绍了ClangStaticAnalyzer静态代码分析工具的使用方法。该工具基于Clang/LLVM,可检测C/C++代码中的内存泄漏、空指针等常见错误。主要内容包括:安装指南(Ubuntu/macOS/Windows)、命令行使用方法、CMake项目集成方案、GitHub Actions自动化分析配置,以及HTML报告生成与查看。文章还提供了官方资源链接,帮助开发者系统掌握从本地调试到持续集成的完整静态分析工作流,提升代码质量保障能力。适用于需要在开发过程中实施静态分析的C/C++项目。

u014358031的博客 2157

开启 SQL Server 的 Change Data Capture, 并验证 CDC 开启后的效果

开启SQL Server的Change Data Capture,并验证CDC开启后的效果

半濠春水的博客 1906

从业10年的AI应用架构师:企业AI平台运营的4个核心经验,值得收藏

去年年底,我在某大型制造企业做AI咨询时,遇到了这样的场景:这不是个例。我接触过的10家企业中,有7家的AI平台都陷入了“技术自嗨”的陷阱——技术团队追求模型精度、功能完备性,却忽略了业务到底需要什么。如果你也遇到过类似问题:比如“模型准确率很高,但业务不买账”“AI项目上线后没人用”“投入产出比极低”,那么这篇文章的4个经验,可能会帮你避开这些坑。很多企业认为,AI平台就是“买一套工具+部署几个模型”。但实际上,企业AI平台的本质是“技术与业务的连接生态”:根据Gartner的报告,80%的企业AI项目失

AI 原生应用开发的博客 709

端到端机器学习工程化实战:从数据契约到生产监控

端到端机器学习并非仅指模型训练完成,而是涵盖数据接入、特征管理、模型部署与线上监控的全生命周期工程体系。其核心原理在于通过分层解耦(数据层、特征层、模型层、服务层)实现可追溯、可运维、可持续交付。技术价值体现在规避数据漂移、保障推理一致性、支撑灰度发布与快速回滚;典型应用场景包括智能客服工单分类、设备故障预测、电商退货原因识别等工业级落地任务。本文聚焦真实项目中必须践行的数据契约、特征存储(Feast)、模型容器化(Docker+ONNX)、云原生服务(FastAPI+K8s)及多维监控(Prometheu

weixin_30415113的博客 457

Python 爬虫实战:深入同花顺,抓取股票行情数据,助力投资决策

通过本次 Python 爬虫实战,我们成功地从同花顺抓取了股票行情数据,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分股票的数据,且未对股票的历史行情进行深入分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多股票的数据,并深入分析股票的历史行情走势、技术指标等,为投资者提供更有价值的数据支持。

u014481728的博客 5334

80、编程学习资源与x86知识全解析

本文详细介绍了编程学习中多个领域的优秀书籍和博客资源,涵盖逆向工程、C/C++、x86/x86-64架构、ARM、汇编语言、Java、UNIX、密码学等多个方向。同时,深入解析了x86架构的核心知识,包括术语、通用寄存器、FPU寄存器、SIMD寄存器、调试寄存器以及常用指令的使用方法和操作步骤。通过本文,读者可以系统地掌握底层编程知识,并应用于逆向工程、系统开发和性能优化等领域。

tree的博客 219

机器学习生产化落地:从Notebook到高可用模型服务的四层架构

机器学习模型部署不是简单导出为ONNX或封装API,而是涉及数据可信性、特征确定性、服务可观测性与业务适配性的系统工程。其核心在于解决真实场景中的并发压力、数据漂移、GPU资源争抢与故障快速回滚等关键挑战。模型服务化需兼顾低延迟与高稳定性,而数据漂移监控则保障模型长期有效性。本文基于物流调度平台实战,详解分层解耦架构(数据接入→特征计算→模型服务→业务网关)的设计原理与硬核配置,覆盖Kafka消费调优、Redis幂等缓存、Triton显存精控、OpenResty Lua规则引擎等可复用方案,为算法、开发与运

weixin_33787529的博客 340

手把手教你学simulink实例--基于Simulink的船舶发电柴油机建模与健康状态研究

船舶发电柴油机是现代船舶电力系统的核心设备,为船舶提供稳定的电能供应。然而,由于长期运行在复杂的海洋环境中,船舶发电柴油机容易受到磨损、腐蚀和疲劳等损伤的影响,导致其性能下降甚至发生故障。因此,对船舶发电柴油机进行建模和健康状态监测具有重要意义。本项目旨在使用MATLAB/Simulink平台,建立船舶发电柴油机的动力学模型,并通过仿真分析其健康状态,预测潜在故障,从而提高船舶运行的安全性和经济性。

MHD0815的博客 1325

机器学习自动化:构建可复现、可审计、可演进的MLOps工业流水线

机器学习自动化并非简单封装训练脚本,而是面向工程落地的系统性能力——它以可复现性为基石,通过声明式流水线、特征仓库、实验追踪与闭环监控等关键技术,解决数据漂移、特征失效、环境不一致等高频痛点。其核心价值在于将模型从‘一次性实验’升级为‘可持续服务’,支撑金融风控、智能推荐等关键业务场景的稳定迭代。本文聚焦真实产线中已验证的七层防御体系与声明式架构设计,覆盖从Flink实时接入、Kubeflow计算图编排到Triton弹性部署的全链路实践,为数据科学家与MLOps工程师提供可直接复用的工业化落地方案。

weixin_30387799的博客 466

【2024-06-21】网易互娱秋招实习笔试三道编程题解

恭喜发现宝藏!搜索公众号【TechGuide】回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经。作者@TechGuide【全网同名】

试问道几许 1055

光学材料仿真软件:FDTD Solutions_(4).材料属性的定义与应用

在光学材料仿真软件中,材料属性的定义和应用是至关重要的一步。正确地定义材料属性可以确保仿真结果的准确性和可靠性。本节将详细介绍如何在FDTD Solutions中定义和应用不同的材料属性,包括介质材料、金属材料、色散材料等,并提供具体的代码示例和数据样例。介质材料是光学仿真中最常见的材料类型之一。在FDTD Solutions中,可以通过多种方式定义介质材料,包括使用预定义的材料库、自定义材料参数或导入材料数据文件。FDTD Solutions内置了一个丰富的材料库,包含了许多常用材料的光学性质。

kkchenjj的博客 1401

Kafka在MLOps中的核心作用:构建高可靠实时特征数据链路

消息队列是支撑现代机器学习工程化落地的关键基础设施,其本质是解决数据在训练与推理之间的时间一致性、格式可演化性及流量弹性问题。Kafka凭借分区有序日志、精确一次语义和Schema Registry治理能力,成为MLOps中事实标准的实时数据中枢。它不仅承载原始事件流,更驱动特征实时计算、模型服务解耦接入与反馈闭环监控,显著提升模型线上稳定性与迭代效率。本文聚焦Kafka在MLOps场景下的分层定位、Topic设计规范、Avro Schema治理及生产调优实践,覆盖从埋点采集到漂移告警的完整链路。

weixin_30251829的博客 620

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

数据全栈知识架构解析:从平台到应用的四层实战指南

在数据驱动的时代,数据处理已从单一工具演变为涵盖数据采集、存储、计算、管理和应用的全栈体系。其核心原理在于围绕数据的生命周期,通过分层架构实现价值转化。数据全栈的技术价值在于打通数据从产生到产生业务价值的完整链路,确保数据在规模、效率和可靠性上满足现代企业的需求。典型的应用场景包括实时数据分析、数据仓库构建、机器学习平台搭建以及数据治理等。本文以数据平台层、数据开发层、数据管理层和数据分析层这四层架构为主线,结合**数据治理**和**实时计算**等关键技术,系统阐述了如何构建一个高效、可靠的数据处理体系,并

weixin_34112181的博客 380

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

机器学习生产化实战:从模型部署到系统级可靠性建设

机器学习模型上线不是终点,而是系统性风险的起点。在真实业务场景中,模型失效往往源于数据漂移、特征管道断裂、时序错位或集成不兼容等工程问题,而非算法本身缺陷。本文围绕MLOps核心挑战,深入解析如何构建具备契约化数据流、显式降级策略、全链路可观测性与版本化治理能力的生产级模型系统。重点覆盖特征服务SLA设计、模型服务灰度发布机制、三级监控体系(基础设施/数据质量/业务效果)以及故障驱动的韧性演进方法论,为数据科学家和AI工程师提供可落地的模型运维操作框架。

weixin_33866037的博客 405

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MuleSoft+LangChain企业级AI编排实战指南

AI编排(AI Orchestration)是打通企业多源数据与大模型能力的关键工程实践,其核心在于将LLM的语义理解力与传统集成平台的数据治理力分层协同。它并非简单API串联,而是通过数据流与控制流的物理隔离,实现可审计、可灰度、可合规的AI流水线。典型技术价值体现在:解决CRM/ERP/BI系统间数据割裂导致的模型‘盲区’,支撑销售风险预警、智能邮件生成等高价值场景;同时保障GDPR日志留存、PII动态脱敏、OFAC模糊匹配等企业级治理要求。本文聚焦MuleSoft与LangChain混合架构的落地细节

weixin_30892889的博客 418
上一篇: 老外发短信时常用的英文缩写
下一篇: SQL Server 的数据存储(SQL Server data strorage)
赵大米
博客等级 码龄24年 5粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值