首页 > 数据库 >从ClickHouse通往MySQL的几条道路

从ClickHouse通往MySQL的几条道路

时间:2023-12-08 13:45:00浏览次数:48  
标签:场景 处理 数据库 几条 MySQL 数据 ClickHouse

一、应用背景简介

ClickHouse 是 Yandex(俄罗斯最大的搜索引擎)开源的一个用于实时数据分析的基于列存储的数据库,其处理数据的速度比传统方法快 100-1000 倍。ClickHouse 的性能超过了目前市场上可比的面向列的 DBMS,每秒钟每台服务器每秒处理数亿至十亿多行和数十千兆字节的数据。它是一个用于联机分析(OLAP)的列式数据库管理系统;(OLAP是仓库型数据库,主要是读取数据,做复杂数据分析,侧重技术决策支持,提供直观简单的结果)

那 ClickHouse OLAP 适用场景有:1)读多于写;2)大宽表,读大量行但是少量列,结果集较小;3)数据批量写入,且数据不更新或少更新;4)无需事务,数据一致性要求低;5)灵活多变,不适合预先建模。

MySQL是一个关系型数据库管理系统,广泛用于各种应用程序和网站开发。MySQL容易上手和学习,已经被广泛应用于各种生产环境中有良好的稳定性和可靠性,MySQL支持事务处理,能够保证数据的完整性和一致性,适合需要复杂数据处理和事务控制的应用。

在我们应用中的使用场景来看,简单来说通常会看中了clickhouse在处理大批量数据的写入和读取分析方面的性能,MySQL会主要负责一些基于模型进行指标二次加工的高频查询及复杂join的查询。

二、实际应用中存在的问题

在数据相关应用处理过程中,一般会按下图的分层进行数据处理;

  • 现有的一个实际应用场景中,会把MySQL中的数据进行全量的更替,即在新一批基于ck模型加工的数据插入MySQL库表时删除原表全量数据,来实现对于最新全量数据的刷新;
  • 该处理机制因为完全不用考虑历史数据的包袱,每批次都是全量加工和替换,是一种运行简单、有效、数据加工的准确率高的机制,在小业务量场景下可以节省开发量和时间,弊端是在大业务场景下性能端会出现与之关联的多种问题;这些告警可能包括因为读写频率高引起的CPU使用率过高、因为binlog产生量过大导致的磁盘使用量告警等;负责加工的后端应用也可能也会因数据加工量过大而引发内存使用率过高的风险。

基于现有架构设计和问题背景,需要对相关的问题进行一定的调研,来探索优化的可能性;

三、几种处理方法及适配的场景分析

1. 使用数据库触发器(Trigger):在 ClickHouse 表中创建触发器,当订单数据发生变化时,触发器可以将更新操作发送到 MySQL 表中进行更新。触发器可以监视 ClickHouse 表中的 INSERT、UPDATE 和 DELETE 操作,并将相应的操作转发到 MySQL 表中。在类似于同步数据表的场景下,触发器场景比较合适,但是在面对需要高度定制化的数据加工场景下,就显得不太合适了,也不方便调试。

2.此外,也会有通过外部触发器结合消息队列的方案可以支持处理这种情况。这里边会涉及到需要监听ClickHouse的binlog记录或者CDC(Change Data Capture)流,在数据发生变化时进行解析和转发。

3.也可以在应用层面,来监听ClickHouse数据库的数据变化,并在变化发生时发送相关的消息到消息队列。例如使用Debezium库来监听ClickHouse数据库的数据变化。你可以根据自己的需求来配置连接信息、监听的表等,并在监听器中编写业务逻辑处理数据变化事件。

这几种处理方式相对来说对于处理的变化量来说是比较大的,即所有对于数据库的操作过程都会被监听端响应处理,所以如果数据变化量非常大的话,那么监听消费端的压力也会随之上升;

4. 轮询查询:Java 应用可以定期轮询查询 ClickHouse 表的变化,通过比对新的订单数据和已有的订单数据,找出有变动的数据行,并进行相应的加工处理和更新操作。这其中的关键就是采用何种方法进行比对了。

  • 比对方法可以通过逐个字段的比对来筛选该行数据是否有变化,这种方法简单有效,但是瓶颈也比较明显:不适合处理大量数据,因为性能不算好;
  • 也可以通过把数据行进行哈希算法和摘要处理,来实现更快速的字段变化的比对,这种方式相对来说会更适合处理数据量大一些的场景;

当然,处理过程并不限于查询过程,有些场景是在查询阶段并不需要筛选数据,而是基于原始模型加工完的数据结果上进行字段值比对或哈希处理,用来标记处理完的数据结果是否有变化,有变化的更新无则不处理,从而减小对指标结果数据的更新范围;

以上内容是对于所与到问题的处理方法的一个浅显分析,如果您还有什么指标加工方面好的经验,欢迎指正和交流。

作者:京东物流 陈鲲

来源:京东云开发者社区 自猿其说Tech 转载请注明来源

标签:场景,处理,数据库,几条,MySQL,数据,ClickHouse
From: https://www.cnblogs.com/Jcloud/p/17884582.html

相关文章

  • Ubuntu安装MySQL数据库
    Ubuntu安装MySQL数据库介绍MySQL的定义MySQL是一种开源关系型数据库管理系统。与其他关系型数据库一样,MySQL将数据存储在由行和列组成的表中。用户可以使用结构化查询语言(通常称为SQL)定义、操作、控制和查询数据。由于MySQL是开源的,因此它的大量功能是在超过25年与用户......
  • MySQL数据表的CURD
    一、数据表的CURD1.create数据创建一个员工表,新建employee表并向表中添加一些记录:创建数据表:createtableemployee(idint,namevarchar(20),sexint,birthdaydate,salarydouble,entry_datedate,resumetext);向数据表中插入数据:insertintoemployeevalues(......
  • MySQL服务器8核32G max_connections设置为10000的情况,springboot里面的Druid参数配置
    MySQL服务器8核32Gmax_connections设置为10000的情况,springboot里面的Druid参数配置多少合适啊,MySQL服务器8核32G,max_connections设置为10000,确实是相当大的一个配置啊。对于Druid的参数配置,得看你系统的具体情况。一般来说,你可以考虑以下几个参数:initialSize:连接池的初始大小,你......
  • mysql的约束M
    数据表的约束约束的目的是保证数据库中数据的完整性和一致性常见的约束有主键约束(primarykey)外键约束(foreignkey)非空约束(notnull)唯一约束(unique)默认约束(default)1:primarykey约束理解:primarykey可以有一个字段或者多个字段组成,要求:主键字段的数据唯一,并且不能为空......
  • Mysql之多表查询
    关于Mysql的多表操作表与表的关系通常来说我们根据业务要求及其业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以我们将表与表的关系分为三类一对一一对多多对多物理外键和逻辑外键物理外键是值使用foreignkey作为外键关联另一张表的字段的连接方法物理外......
  • pip 安装 mysqlclient报错ERROR: Could not build wheels for mysqlclient, which is
    这是本地环境中没有安装C++的环境,安装好后再次运行报错:国内网站上找了半天,试了又试,不能根本上解决问题,最后从国外的网站上找到的:下载安装MariaDBCConnector,地址:DownloadMariaDBConnectorsfordataaccess&analysis|MariaDB,安装到默认路径下,关闭重新打开cmd,输入:pi......
  • Flask读取MySQL数据库中的图片并返回给前端的步骤?
    要在Flask中读取MySQL数据库中的图片并返回给前端,可以按照以下步骤进行操作:导入相关模块:在Flask应用程序文件中,首先导入必要的模块,包括Flask、MySQL驱动和一些辅助函数。fromflaskimportFlask,request,send_fileimportmysql.connector创建Flask应用程序实例:创建一个Flask应......
  • MySQL 数据备份
    备份类型常见的备份有冷备份、温备份、热备份,还有什么物理备份、逻辑备份、增量备份、差异备份等等。冷备份:需要服务停止,在备份期间不能进行读和写操作。温备份:读操作可执行;但写操作不可执行热备份:读和写都可以正常进行,不影响数据备份逻辑备份:导出数据库中的数据和对......
  • MySQL LOAD DATA LOCAL, 如何跳过第一行?
    在MySQL中,使用LOADDATALOCAL命令可以将数据从本地的文件导入到数据库里面。常见的导入数据格式是csv和txt。但是在导入csv和txt格式的数据时,第一行通常是表头,而不是数据,因此我们需要跳过第一行,只导入后面的数据。阅读更多:MySQL教程 方法一:使用IGNORE关键字LOADDATALOCA......
  • MySQL创建索引的优缺点
    索引的优点1.创建唯一性索引,保证数据库表中每一行数据的唯一性2.大大加快数据的检索速度,这也是创建索引的最主要的原因3.加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分......