云时代,MySQL到ClickHouse数据同步产品对比推荐

ClickHouse 在执行分析查询时的速度优势很好的弥补了 MySQL 的不足,但是对于很多开发者和DBA来说,如何将MySQL稳定、高效、简单的同步到 ClickHouse 却很困难。本文对比了 NineData、MaterializeMySQL(ClickHouse自带)、Bifrost 三款产品,看看他们在同步时的差异。

对比结果概述

整体上,NineData(官网:https://www.ninedata.cloud/ )的数据复制功能在功能、性能表现最突出。其次是Bifrost和ClickHouse自带的MaterializeMySQL。NineData在增量DDL的处理、字段映射的准确性、无主键表、以及功能丰富度上最强(数据校验、过滤、限流等),详细的对比如下图:

云时代,MySQL到ClickHouse数据同步产品对比推荐

MySQL到ClickHouse数据同步产品对比结果概述

结构映射对比

在做了详细对比之后,对于基础类型,只有NineData考虑的更加完整,例如MySQL的datetime需要映射到ClickHouse的DateTime64,否则则可能出现数据丢失。如果使用Biforst或MaterializeMySQL等其他产品均映射到datetime可能会造成一定程度的数据精度丢失。

此外,在对比了MySQL全部数据类型之后,发现NineData支持更完整,例如对JSON类型、几何数据、地理信息仅NineData支持。此外,对于基础类型,也只有NineData考虑更加细致,使用Biforst或MaterializeMySQL等其他产品则可能导致精度丢失,从而造成数据丢失。

详细的对比如下图:

云时代,MySQL到ClickHouse数据同步产品对比推荐

无主键表支持

NineData对记录做了特殊的标记处理,所以很好的支持了无主键表的数据同步。而MaterializeMySQL、Biforst均不支持。

详细的对比如下图:

云时代,MySQL到ClickHouse数据同步产品对比推荐

无主键表支持情况

增量DDL

对于数据增量同步,支持好各种类型的DDL是保障同步链路持续稳定的关键,NineData在无主键表DDL支持、字段删除、字段名修改等特殊操作均做了适配处理,可以很好的保障复制链路的问题。同时,NineData还提供了可视化的错误修复和跳过功能,可以最大限度的保障链路持续稳定。

详细的对比如下图:

云时代,MySQL到ClickHouse数据同步产品对比推荐

增量DDL对比结果

限流、对比、过滤等

除了前面介绍的一般功能之外,为了提升数据质量、保障稳定,NineData还支持了包括数据对比、运行中的限流、数据过滤等功能。具体的说明如下:

云时代,MySQL到ClickHouse数据同步产品对比推荐

增量DDL 限流、对比、过滤等对比结果

同步性能对比

这里使用 sysbench工具生成了5000万行记录进行全量性能对比,再生成约1800万次DML(约5GB Binlog)进行增量性能对比。

对比中,全量同步 NineData 性能为36.2W RPS(每秒同步记录数)为最高;增量同步则是 ClickHouse 自带的同步工具 MaterializeMySQL 最高,需要注意,MaterializeMySQL 在错误处理上比较简单,如果报错则需要全部重新同步。

详细的对比如下:

  • 全量同步

通过sysbench生成10张表,每张表500W记录(5000W行),数据文件大小约为12G:

云时代,MySQL到ClickHouse数据同步产品对比推荐

同步性能对比

  • 增量同步

通过sysbench生成5G大小的BinLog日志(约1800W次DML),再进行增量同步:

云时代,MySQL到ClickHouse数据同步产品对比推荐

增量同步

总结

NineDatahttps://www.ninedata.cloud/)在功能上领先其他同步工具,特别是字段类型的全面适配和增量复制期间DDL的支持度,并且在动态限流、数据对比、监控等能力上也支持的最完善。

所以,如果想把MySQL的数据实时同步到ClickHouse,推荐使用NineData,不仅使用简单(SaaS),并在满足功能和性能的前提下,实现了字段类型的无损转换和数据的实时复制,很好的解决MySQL 同步数据到ClickHouse的问题。

补充说明

当前各个云厂商虽然都提供ClickHouse托管服务,但是另一方面云厂商又都在发展自己的数仓产品,在同步功能支持上通常仅对自家的数仓产品支持比较好,而对ClickHouse同步支持都很薄弱。此外,开源工具Canal也因为不能很好的支持结构同步,使用和维护起来并不方便。

原文链接:https://www.cnblogs.com/ninedata/p/17332783.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:云时代,MySQL到ClickHouse数据同步产品对比推荐 - Python技术站

(0)
上一篇 2023年4月19日
下一篇 2023年4月19日

相关文章

  • MySQL实例crash的案例详细分析

    MySQL实例crash的案例详细分析 背景介绍 MySQL是一个流行的关系型数据库管理系统,但在使用它的过程中,有时会遇到实例crash的情况。实例crash可能由于多种因素引起,如硬件故障、操作系统崩溃、MySQL bug等。 解决步骤 以下是一些解决MySQL实例crash的步骤: 步骤1:收集日志信息 MySQL服务器维护多种日志,包括错误日志、二进…

    MySQL 2023年5月18日
    00
  • MySQL远程连接丢失问题解决方法(Lost connection to MySQL server)

    当我们在MySQL客户端或者程序中远程连接MySQL服务器时,常常会出现“Lost connection to MySQL server”或者“Server has gone away”的问题。这是因为在网络传输的过程中可能会发生一些错误或者超时,导致连接中断。下面我将为大家详细讲解MySQL远程连接丢失问题的解决方法。 原因分析 MySQL远程连接丢失可能…

    MySQL 2023年5月18日
    00
  • MySQL – change 和 modify 的区别

    表描述MySQL 中 change 和 modify 区别 更改列名 change: alter table 表名 change 旧列名 新列名 类型 只更改列属性 change: alter table 表名 列名 列名 类型 相同的列名要写两次. 更改列属性 modify: alter table 表名 列名 类型 区别:1)change 可以更改列名 …

    MySQL 2023年4月12日
    00
  • oracle和mysql几点差异对比

    Oracle与mysql差异性总结 之前有个项目是用oracle数据库进行开发,需要把数据库改成mysql,遇到了一些地方需要注意的,就简单记了下来。 备注: 再把oracle转成mysql的时候,表中字段的类型转换是比较头疼的,比如oracle中的number转成mysql的时候,你要从“FLOAT、DOUBLE、TINYINT、 SMALLINT、MED…

    MySQL 2023年4月13日
    00
  • MySQL的复合索引总结

    MySQL是一款常用的关系型数据库,索引是MySQL中优化查询性能的重要手段。复合索引是一种在多列上创建的索引,相比于单列索引,复合索引能够更加精确的定位需要检索的数据。 复合索引概述 复合索引是在多个列上创建的索引,可以通过查询中的多个条件来定位到符合条件的数据。对于多个列的查询,复合索引优于单列索引,因为单列索引不能够覆盖所有查询列的数据。 复合索引的创…

    MySQL 2023年5月19日
    00
  • Mysql8断电崩溃解决

    Mysql8断电崩溃解决 如果Mysql8在运行时遇到非正常中断,比如断电或崩溃,可能会导致Mysql数据损坏或无法启动。下面是解决这个问题的完整攻略。 步骤一:检查Mysql8状态 在尝试修复Mysql8之前,必须先检查Mysql8的状态。运行以下命令: sudo systemctl status mysql.service 如果Mysql8正在运行,则状…

    MySQL 2023年5月18日
    00
  • linux – mysql 异常:/usr/bin/which: no mysql in

    问题描述 运行:which mysql 报错:/usr/bin/which: no mysql in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)   解决方案 #加入环境变量,编辑 /etc/profile,这样可…

    MySQL 2023年4月13日
    00
  • MySQL怎样将子查询修改为表连接

    将子查询修改为表连接的好处是可以提高查询效率和可读性。子查询需要执行完整的子语句,然后将结果作为内存中的表进行连接操作;而表连接只需要执行一次查询,将两个表按照条件关联起来,比较快速、高效。 下面提供一个MySQL子查询修改为表连接的示例: 原始查询语句: SELECT * FROM users WHERE user_id IN (SELECT user_i…

    MySQL 2023年3月9日
    00
合作推广
合作推广
分享本页
返回顶部