美文网首页
ClickHouse外部字典(MySQL)使用小结

ClickHouse外部字典(MySQL)使用小结

作者: 淡淡的小番茄 | 来源:发表于2021-12-03 08:49 被阅读0次

    背景

    之前介绍过,对于维表数据,一般来说数据量比较少的场景。我们可以使用字典表进行数据的同步。比如这样一个场景,我们应用表,存储在MySQL中,数据量不多,千级别。我们可以建一个外部字典,然后指向MySQL这张表。具体的方法,直接参考官网的链接:

    https://clickhouse.com/docs/zh/sql-reference/dictionaries/external-dictionaries/external-dicts-dict-sources/#dicts-external_dicts_dict_sources-mysql

    原理分析

    这里主要总结下使用过程汇总的一些经验。ClickHouse后台会有调度模块,根据你配置的调度周期,周期的尝试从MySQL库中拉取数据。我们来以clickhouse-server.log中的日志信息简单详的析下:

    2021.11.29 17:40:26.952838 [ 1351 ] {} <Trace> MySQLDictionarySource: SHOW TABLE STATUS LIKE 'application'

    2021.11.29 17:40:26.953626 [ 1351 ] {} <Trace> MySQLDictionarySource: Got modification time: 2021-11-29 17:11:00

    2021.11.29 17:40:26.953658 [ 1351 ] {} <Trace> ExternalDictionariesLoader: Supposed update time for 'dmp_log.ods_application' is 2021-11-29 17:45:52 (loaded, lifetime [300, 360], no errors)

    2021.11.29 17:40:26.953668 [ 1351 ] {} <Trace> ExternalDictionariesLoader: Object 'dmp_log.ods_application' not modified, will not reload. Next update at 2021-11-29 17:45:52

    从上面的日志来看,整个过程描述非常的清晰。

    1、首先ClickHouse MySQLDictionarySource模块会连接到MySQL数据库,然后执行:SHOW TABLE STATUS LIKE 'application'命令。查看表信息是否有变化。可以登录到MySQL执行下,会有比较形象的理解:

    2、获取到最近修改时间后,ExternalDictionariesLoader会按照你配置的同步周期(范围),设置下一次同步时间。同步时间会散落在同步周期的范围内,以避免同一时间同步任务过多问题。

    3、如果没有变化将不会重新加载。

    使用小结

    MySQL部署方式一般来说都是主从模式,引擎表配置的时候一般都优先同步从库。我们遇到过字典表中的数据,与MySQL数据不一致的情况。结合字典同步机制可以按如下步骤进行排查。

    1、查看同步日志,确认字典表是否在正常运行。排除语法错误、网络不通。

    2、如果正常运行,但是没有同步。查看MySQL的主从是否正常,可以直接查询表里面的数据,进行比对。

    3、再结合同步日志,明确原因。

    一般来说,在字典表运行正常的情况下,绝大多数是MySQL本身的问题,需要重点查询MySQL的主从复制,是否存在大的延迟,或者压根就运行不正常。

    相关文章

      网友评论

          本文标题:ClickHouse外部字典(MySQL)使用小结

          本文链接:https://www.haomeiwen.com/subject/zzdpxrtx.html