乐趣区

关于sql-server:实时数据引擎系列五-关于-SQL-Server-与-SQL-Server-CDC

摘要:在企业客户里, SQL Server 在传统的制造业仍然散发着长久的生命力,SQL Server 的 CDC 复杂度相比 Oracle 较低, 因而规范的官网派做法就是间接应用这个 CDC 接口进行同步,但江湖上也有通过裸解析 ldf 文件来间接读取数据库变更,本文将就这两大门派开展探讨。

前言

上次发的对于 Oracle CDC 的文章反应不错, 而像这种类型的数据库还有好几个, 这里把三大闭源数据库先讲一遍: Oracle, SQL Server 和 DB2。

在企业客户里, SQL Server 的应用范畴远远超过我之前的预期, 这个在互联网用户那边简直见不到的数据库, 在传统的制造业, 企业客户里仍然散发着长久的生命力, 在 DB Engine 的排名里, SQL Server 仅次于 Oracle 与 Mysql, 排在第三, 是 TAPDATA 在客户场景落地的时候常常碰见的数据库之一。

两大门派

SQL Server 的 CDC 复杂度相比 Oracle 较低, 且官网从 08 版本就人造反对这个性能, 只是在 16 版本之前, 这个设置只有在企业版才有, 在 16 版本之后, 在社区版也能够开启性能, 因而规范的官网派做法就是间接应用这个 CDC 接口进行同步。

在开启 CDC 性能之后, SQL Server 会将变更的内容同步到一张表中, 有主键, 业务方通过轮询这张带主键的表拿到新的事务变更。

这是最好实现的计划之一, 问题有好几个:

  1. 08 版本之前不反对。
  2. 16 版本之前只反对企业版。
  3. 依附轮询, 实时性较差, 且 CDC 表自身也存在提早, 失常状况下的提早往往超过秒级。
  4. 如果遗记从表中取走数据, 这张表会有限收缩。
  5. 被取走的数据会被清理, 无奈回放日志。
  6. 配置简单, 须要思考 ALWAYSON 的状况下, 可用节点切换的 CDC 作业复原的触发等配置。

SQL Server 在进行事务操作时, 会将操作记录在以 ldf 结尾的文件中, 因而江湖中各路草莽瞄准了这一点, 也开发了属于本人的数据追踪套路。

有很多做操作审计, 或者数据同步的厂商开始尝试绕过 CDC, 通过裸解析 ldf 文件来间接读取数据库变更, 具备的劣势是:

  1. 负载与数据库离开, 性能可独自优化, 速度很快, 瓶颈在 IO 上。
  2. 可屏蔽各种部署构造带来的差别, ldf 文件是永恒的。
  3. 事件触发, 相比轮询 CDC 表, 音讯提早很低, 能够在几十毫秒内。

劣势是减少了部署复杂度, 须要在数据库机器上部署一个独自的 Agent 用来做日志的采集, 且须要自行思考高可用切换时 Agent 传输日志的问题。

相比 Oracle 多样的版本, 和齐全无奈捉摸的二进制格局, SQL Server 的解析较为简单, 业界实现的各种商业产品也十分多, 不过目前没有看到在 Linux 下可用的版本, 也没有看到开源的实现呈现。

TAPDATA 的解法

在默认状况下, TAPDATA 应用了轮询 CDC 增量表的形式进行数据获取, 这种形式对用户应用比拟敌对, 不须要额定部署服务, 同时, 反对 ALWAYSON 的主动切换, CDC 工作的主动复原等高可用个性, 不便易上手。

在数据量十分大, CDC Table 性能有余, 或者客户对 CDC 延时有极高要求时, TAPDATA 能够通过 Agent 传输 + 裸日志文件解析的模式, 在取得数倍于传统形式性能的同时, 无效升高了提早

一个小问题

Oracle 日志解析因为比拟艰难, 开源我的项目比拟少, SQL Server 相对来说内容少很多, 而且 Google 一下有大量的商业软件在基于裸日志解析做一些审计, 察看, 同步的事件, 为什么仍然看不到像样的开源我的项目呢?

进一步理解 Tapdata 实时数据服务平台,更多技术文章可返回 Tapdata 技术博客。Tapdata 自研的异构数据库实时同步工具—— Tapdata Cloud,现已收费凋谢给技术开发者应用,目前反对 Oracle、MySQL、PostgreSQL、SQL Server、MongoDB、Elasticsearch、达梦、Kafka 等支流库之间的数据迁徙和同步,行将反对 DB2、Sybase ASE、Redis、GBase、GaussDB 等。

本文作者:Tapdata 技术合伙人肖贝贝,源文地址。

退出移动版