CN114153809A - 基于数据库日志并行实时增量统计的方法 - Google Patents
基于数据库日志并行实时增量统计的方法 Download PDFInfo
- Publication number
- CN114153809A CN114153809A CN202111220905.6A CN202111220905A CN114153809A CN 114153809 A CN114153809 A CN 114153809A CN 202111220905 A CN202111220905 A CN 202111220905A CN 114153809 A CN114153809 A CN 114153809A
- Authority
- CN
- China
- Prior art keywords
- data
- clickhouse
- node
- event
- engine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2462—Approximate or statistical queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Probability & Statistics with Applications (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Fuzzy Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于业务***数据进行并行实时增量统计的方法,包括单机模式和分布式两种情况,通过监听业务数据库的操作日志,将业务数据实时增量同步到ClickHouse节点,对业务数据无侵入,借助ClickHouse节点数据同步表的增量统计功能进行指标数据实时统计,将业务数据库的指标数据计算压力转移到ClickHouse节点上,提高了指标数据计算性能,实现了实时指标数据高并发的亚秒级查询,解决了频繁更新的海量数据的指标数据统计。
Description
技术领域
本发明涉及计算机科学大数据技术领域,特别涉及一种基于业务***数据进行并行实时增量统计的方法。
背景技术
业务***中常常有一些实时指标数据的统计需求,当业务数据发生变化后,用户能实时查询变化后的统计指标数据。业务***通常使用成熟的关系型数据库(如MySQL、SQLServer、Oracle、PostgreSQL等)作为业务数据存储。常用的实时统计方法有如下几种:
1)使用统计类SQL语句从业务数据库进行实时查询。
2)使用内存缓存,将实时计算的统计指标数据保存到内存缓存,当影响指标统计的数据变化后需要清除对应缓存指标数据,从而在下次访问统计指标数据时触发指标重算并更新缓存。
3)业务数据库使用读写分离技术,从备用节点进行指标数据统计与查询。
4)业务数据库使用分片存储技术,将数据量大的表进行水平拆分,这样单个统计类SQL语句能分发到数据库分片节点上并行执行。
5)服务器端定时进行指标统计计算,计算完成后对统计指标数据进行保存与更新。
6)在数据库创建触发器,当业务数据发生变化后,通过触发器更新相应的指标数据。
对于上述方法1),由于统计类SQL语句执行时大多需要整表数据扫描,当业务表的数据量较大或指标数据查询并发度增加时,会严重增加业务数据库的压力而无法正常相应。
对于方法2),引入内存缓存后,可以降低统计类SQL语句执行的频度,但如果数据变化频繁时也会频繁清除缓存进行指标重算,无法达到优化效果,同时也无法保证指标重算时基于数据量大的业务表的统计操作可以快速响应。且此方法由于需要人为的分析哪些业务数据变化会对哪些统计指标产生影响,并进行相应的编码操作清除对应指标缓存,从而增加了开发实施的复杂程度。
对于方法3),使用读写分离技术,指标数据统计在备用数据库执行,虽然指标数据计算不影响主用业务数据库读写性能,但也同样无法保证基于数据量大的表的统计操作可以快速响应。
对于方法4),分片存储技术可以将统计计算压力分发到各个分片数据库节点上去,但指标计算还是需要整表扫描,无法降低统计的计算开销导致需要增加大量硬件资源以满足高并发的实时统计需求。
对于方法5),通过降低统计类SQL语句执行频度来减轻数据库统计压力,但无法保证统计指标数据的及时更新。
对于方法6),使用该方法对统计指标数据进行增量更新,大幅减轻了数据库的压力,提高了统计性能,但此方法也需要人为的分析哪些业务数据变化会对哪些统计指标产生影响,并进行相应的编码处理;对于一些无法根据当前统计指标结合增量数据进行增量计算的指标,还需要在增量计算过程中保存指标统计数据的中间状态数据并更新;对于指标统计业务逻辑发生变化或增量计算过程出现BUG的情况,还需要更具存量数据实现指标重算;对于分片存储的业务数据库集群,还需要考虑指标计算结果合并的问题,上述情况都大大增加了此方法实施的复杂程度。
发明内容
本发明的目的在于基于业务数据库日志进行数据实时同步与指标数据实时计算,实现实时指标数据高并发的亚秒级查询,解决了频繁更新的海量数据的指标数据统计,以及并行实时增量统计的问题,提供一种基于业务***数据进行并行实时增量统计的方法,包括了单机模式和分布式两种情况。
为了实现上述发明目的,本发明实施例提供了以下技术方案:
作为一种可实施方式,基于单机模式下数据库日志并行实时增量统计的方法,包括以下步骤:
步骤S1:启动数据事件消费者,创建ClickHouse节点对应的数据同步表,并将业务数据库表的全量数据同步到创建的数据同步表中;
步骤S2:启动数据事件生产者,按照redis记录的业务数据库日志位置的顺序读取业务数据库日志,根据先后读取业务数据库日志的顺序将其推送到消息队列;所述业务数据库日志包括数据新增事件、表结构变化事件;
步骤S3:事件数据消费者完成全量数据同步后,自动开启增量同步操作,消费消息队列中的数据新增事件和/或表结构变化事件,从而将数据新增事件和/或表结构变化事件同步到ClickHouse节点的数据同步表中;
步骤S4:根据指标数据的统计需求,基于ClickHouse节点对应的数据同步表创建AggregatingMergeTree引擎的物化视图,在物化视图创建语句中指定需要执行统计的SQL语句;
步骤S5:使用SQL语句对AggregatingMergeTree引擎的物化视图进行统计指标数据的结果查询。
在上述方案中,通过监听业务数据库的操作日志,将业务数据实时增量同步到ClickHouse节点,对业务数据无侵入,借助ClickHouse节点数据同步表的增量统计功能进行指标数据实时统计,将业务数据库的指标数据计算压力转移到ClickHouse节点上,提高了指标数据计算性能,实现了实时指标数据高并发的亚秒级查询。
更进一步地,所述步骤S1具体包括以下步骤:
步骤S11:启动数据事件消费者,启动后检查ClickHouse节点对应的数据同步表是否创建;
步骤S12:若未创建ClickHouse节点对应的数据同步表,则创建CollapsingMergeTree引擎表作为ClickHouse节点对应的数据同步表;所述CollapsingMergeTree引擎表的状态字段为sign,当sign为1时表示数据为有效,当sign为-1时表示数据为无效;
步骤S13:创建好ClickHouse节点对应的数据同步表后,将业务数据库表的全量数据同步到CollapsingMergeTree引擎表中;全量数据同步期间对同步的业务数据库表加上只读锁。
在上述方案中,可使用VersionedCollapsingMergeTree引擎表替换CollapsingMergeTree引擎表,通过CollapsingMergeTree引擎表或VersionedCollapsingMergeTree引擎表来保存同步数据。
更进一步地,所述步骤S2具体包括以下步骤:
步骤S21:启动数据事件生产者,按照redis记录的业务数据库日志位置的顺序读取业务数据库日志,若redis尚未记录业务数据库日志,则从业务数据库日志的末尾开始读取;
步骤S22:若读取到数据新增日志,则转换为数据新增事件,并将状态字段sign设置为1;若读取到数据修改日志,则转换为两条数据新增事件,第一条是修改前数据,并将状态字段sign设置为-1,第二条是修改后数据,并将状态字段sign设置为1;若读取到数据删除日志,则转换为数据新增事件,并将状态字段sign设置为-1;
步骤S23:若读取到DDL操作日志,则转换为表结构变化事件,同时转换为ClickHouse节点对应的DDL语句;
步骤S24:将转换后的数据新增事件和表结构变化事件,按照读取业务数据库日志的顺序推送到消息队列。
在上述方案中,通过状态字段“sign”的设置,将原本数据新增、修改、删除的操作转换为数据新增事件,从而将随机磁盘读写操作转换为顺序磁盘写操作,实现了亚秒级的数据实时增量同步。
更进一步地,若redis尚未记录业务数据库日志,则成功推送到消息队列后,将读取业务数据库日志的顺序记录在redis中。
更进一步地,所述步骤S3的具体步骤包括:对于消息队列中的数据新增事件,按照ClickHouse节点语法执行DML语句***数据;对于表结构变化事件,则执行转换后的DDL语句,从而将数据新增事件和/或表结构变化事件同步到ClickHouse节点的数据同步表中。
更进一步地,所述步骤S4具体包括以下步骤:
步骤S41:根据统计需求,基于ClickHouse节点对应同步的CollapsingMergeTree引擎表创建AggregatingMergeTree引擎的物化视图;
步骤S42:在AggregatingMergeTree引擎的物化视图创建语句中,指定需要执行统计的SQL语句,并做部分统计SQL语句指标转换,从而避免状态字段为无效的数据被统计。
在上述方案中,借助ClickHouse节点的AggregatingMergeTree引擎物化视图的增量统计功能,用户只需要在物化视图建表语句中指定需要的统计SQL语句,并基于状态字段“sign”做一些统计指标转换,便可进行全量与增量指标统计,从而降低了指标开发的工作量与复杂程度,且能满足指标数据快速重算的需求。
统计指标转换的意思是,比如原来需要使用count(*)进行行数统计,则可以替换为sum(sign);再比如原来需要使用sum(income)对income字段进行汇总统计,则可以替换为sum(income*sign);再比如原来需要使用avg(income)对income字段求平均值,则可以替换为sum(income*sign)/sum(sign)。
作为另一种可实施的方式,基于分布式部署的数据库日志并行实时增量统计的方法,包括以下步骤:
步骤S1:部署多个数据事件消费者与多个ClickHouse节点,构成ClickHouse分片集群,ClickHouse节点的数量与业务数据库分片节点数量保持一致,一个数据事件消费者负责同步一个对应业务数据库分片节点的数据到一个ClickHouse节点中;
步骤S2:部署多个数据事件生产者,一个数据事件生产者负责一个业务数据库分片节点的数据库日志读取;
当某个数据事件生产者启动后,执行权利要求1所述方法的步骤S2;
步骤S3:每个数据事件消费者负责对应的业务数据库分片节点数据事件的自动增量同步操作,从而将业务数据库分片节点的数据事件同步到对应的ClickHouse节点中;
步骤S4:使用ClickHouse分片集群中每个节点同步的业务数据库的数据同步表创建本地物化视图;
步骤S5:在每个ClickHouse节点创建分布式表,将分布式表关联本地物化视图,使用SQL语句对ClickHouse分片集群中任意节点的分布式表进行统计指标数据的结果查询。
在上述方案中,对于业务数据分片集群,通过分布式部署数据实时同步,通过分布式部署ClickHouse分片集群,从而支持并行数据同步与并行指标数据统计,解决了对频繁更新的海量数据进行并行实时增量统计的问题。
更进一步地,所述步骤S1的具体步骤为:
步骤S11:启动每个数据事件消费者,启动后检查对应的ClickHouse节点的数据同步表是否创建;
步骤S12:若未创建ClickHouse节点对应的数据同步表,则创建CollapsingMergeTree引擎表作为ClickHouse节点对应的数据同步表,或者创建VersionedCollapsingMergeTree引擎表作为ClickHouse节点对应的数据同步表;
所述CollapsingMergeTree引擎表的状态字段为sign,当sign为1时表示数据为有效,当sign为-1时表示数据为无效;
该ClickHouse节点对应的业务数据库分片节点的业务数据库日志更新时间作戳作为所述VersionedCollapsingMergeTree引擎表的版本字段,保证VersionedCollapsingMergeTree引擎表在业务数据库日志合并时可以根据主键加版本字段进行合并,而不受业务数据库日志的顺序影响;
步骤S13:创建好ClickHouse节点对应的数据同步表后,将业务数据库表的全量数据同步到CollapsingMergeTree引擎表或VersionedCollapsingMergeTree引擎表中。
在上述方案中,通过VersionedCollapsingMergeTree引擎表字段解决数据自动合并的顺序问题。
更进一步地,所述步骤S1具体为:在部署多个ClickHouse节点时,对于一个ClickHouse节点创建两个或以上ClickHouse分片副本集;将ClickHouse分片副本集中的CollapsingMergeTree引擎表替换为ReplicatedCollapsingMergeTree引擎表,或将ClickHouse分片副本集中的VersionedCollapsingMergeTree引擎表替换为ReplicatedVersionedCollapsingMergeTree引擎表。
与现有技术相比,本发明的有益效果:
(1)本发明通过监听业务数据库的操作日志,将业务数据同步到ClickHouse节点,使用ClickHouse节点的CollapsingMergeTree引擎表或VersionedCollapsingMergeTree引擎表来保存同步数据,通过状态字段“sign”的设置,将原本数据新增、修改、删除的操作换换为数据新增事件,从而将随机磁盘读写操作转换为顺序磁盘写操作,实现了亚秒级的数据实时增量同步。
(2)在此基础上,本发明借助ClickHouse节点的AggregatingMergeTree引擎物化视图的增量统计功能,将业务数据库的统计指标数据计算压力转移到ClickHouse节点,降低了开发实现复杂度,提高了指标数据计算性能,从而实现了指标高并发的亚秒级查询。
(3)本发明还使用水平分表技术进行数据的分布式存储,通过分布式部署ClickHouse分片集群,从而支持并行数据同步与并行指标数据统计,解决了对频繁更新的海量数据进行并行实时增量统计的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍, 应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明数据流向示意图。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性,或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
实施例1:
本发明通过下述技术方案实现,如图1所示,基于单机模式下数据库日志并行实时增量统计的方法,包括以下步骤:
步骤S1:启动数据事件消费者,创建ClickHouse节点对应的数据同步表,并将业务数据库表的全量数据同步到创建的数据同步表中。
启动数据事件消费者,启动后检查ClickHouse节点对应的数据同步表是否创建,若有创建,则ClickHouse节点对应的数据同步表应该为CollapsingMergeTree引擎表。若未创建,则创建CollapsingMergeTree引擎表。所述CollapsingMergeTree引擎表的状态字段为sign,当sign为1时表示数据为有效,当sign为-1时表示数据为无效。
创建好CollapsingMergeTree引擎表后,将业务数据库表的全量数据同步到CollapsingMergeTree引擎表中,全量数据同步期间对同步的业务数据库表加上只读锁。
步骤S2:启动数据事件生产者,按照redis记录的业务数据库日志位置的顺序读取业务数据库日志,根据先后读取业务数据库日志的顺序将其推送到消息队列;所述业务数据库日志包括数据新增事件、表结构变化事件。
启动数据事件生产者,按照redis记录的业务数据库日志位置的顺序读取业务数据库日志,若redis尚未记录业务数据库日志,则从业务数据库日志的末尾开始读取。
若读取到数据新增日志,则转换为数据新增事件,并将状态字段sign设置为1;若读取到数据修改日志,则转换为两条数据新增事件,第一条是修改前数据,并将状态字段sign设置为-1,第二条是修改后数据,并将状态字段sign设置为1;若读取到数据删除日志,则转换为数据新增事件,并将状态字段sign设置为-1。若读取到DDL操作日志,则转换为表结构变化事件,同时转换为ClickHouse节点对应的DDL语句。
因此业务数据库日志转换为数据新增事件或者表结构变化事件这两种事件。将转换后的数据新增事件和表结构变化事件,按照读取业务数据库日志的顺序推送到消息队列。
对于redis尚未记录业务数据库日志的情况,则成功推送到消息队列后,将读取业务数据库日志的顺序记录在redis中,作为redis记录的业务数据库日志位置。
步骤S3:事件数据消费者完成全量数据同步后,自动开启增量同步操作,消费消息队列中的数据新增事件和/或表结构变化事件。
对于消息队列中的数据新增事件,按照ClickHouse节点语法执行DML语句***数据;对于表结构变化事件,则执行转换后的DDL语句,从而将数据新增事件和/或表结构变化事件同步到ClickHouse节点的数据同步表中,完成增量同步操作。
步骤S4:根据指标数据的统计需求,基于ClickHouse节点对应的数据同步表创建AggregatingMergeTree引擎的物化视图,在物化视图创建语句中指定需要执行统计的SQL语句。
根据统计需求,基于ClickHouse节点对应同步的CollapsingMergeTree引擎表创建AggregatingMergeTree引擎的物化视图。在AggregatingMergeTree引擎的物化视图创建语句中,指定需要执行统计的SQL语句,并做部分统计SQL语句指标转换,比如使用sum(sign)替换count(*),从而避免状态字段为无效的数据被统计。
步骤S5:使用SQL语句对AggregatingMergeTree引擎的物化视图进行统计指标数据的结果查询。
由于AggregatingMergeTree引擎会按照创建物化视图时指定的统计SQL语句聚合函数进行后台自动增量聚合并保存,可通过使用SQL语句对AggregatingMergeTree引擎的物化视图进行统计指标数据结果查询,从而实现对实时指标数据高并发的亚秒级查询。
作为优选的方案,可使用备用业务数据库日志进行数据同步,这样可以减少全量数据同步时锁表操作为业务数据库的影响。
作为另一种可实施方案,如图1所示,基于分布式部署的数据库日志并行实时增量统计的方法,用于提高分片集群业务数据库数据同步与统计计算的性能,包括以下步骤:
步骤S1:部署多个数据事件消费者与多个ClickHouse节点,构成ClickHouse分片集群,ClickHouse节点的数量与业务数据库分片节点数量保持一致,一个数据事件消费者负责同步一个对应业务数据库分片节点的数据到一个ClickHouse节点中。
启动某个数据事件消费者后,执行前述单机模式下的步骤S1,由于分布式消息队列的数据事件读写顺序无法保证,因此可以通过创建VersionedCollapsingMergeTree引擎表来代替CollapsingMergeTree引擎表,从而使用分布式消息队列提高***容错性与消息读写性能。该ClickHouse节点对应的业务数据库分片节点的业务数据库日志更新时间作戳作为所述VersionedCollapsingMergeTree引擎表的版本字段,保证VersionedCollapsingMergeTree引擎表在业务数据库日志合并时可以根据主键加版本字段进行合并,而不受业务数据库日志的顺序影响。
创建好ClickHouse节点对应的数据同步表后,将业务数据库表分片节点的全量数据同步到CollapsingMergeTree引擎表或VersionedCollapsingMergeTree引擎表中。
步骤S2:部署多个数据事件生产者,一个数据事件生产者负责一个业务数据库分片节点的数据库日志读取。
当某个数据事件生产者启动后,执行前述单机模式下的方法的步骤S2。在使用分布式消息队列时,则不受业务数据库日志的顺序影响。
步骤S3:每个数据事件消费者负责对应的业务数据库分片节点数据事件的自动增量同步操作,从而将业务数据库分片节点的数据事件同步到对应的ClickHouse节点中。
对于每个数据事件消费者消费分布式消息队列中的数据事件时,增量同步操作与单机模式下的方法的步骤S3相同。
步骤S4:使用ClickHouse分片集群中每个节点同步的业务数据库的数据同步表创建本地物化视图。
在创建每个节点同步的本地物化视图时,与前述单机模式下的方法的步骤S4相同,可以理解的,在基于CollapsingMergeTree引擎表创建AggregatingMergeTree引擎的物化视图时,也可以基于VersionedCollapsingMergeTree表创建对应的AggregatingMergeTree引擎的物化视图。
步骤S5:在每个ClickHouse节点创建分布式表,将分布式表关联本地物化视图,使用SQL语句对ClickHouse分片集群中任意节点的分布式表进行统计指标数据的结果查询。
由于本地物化视图会进行后台自动增量聚合并保存,而查询分布式表时会对本地物化视图统计数据结果进行合并,可通过使用SQL语句对ClickHouse分片集群中任意节点的分布式表进行统计指标数据的结果查询,从而实现实时指标高并发的亚秒级查询。
作为优选的方案,在部署多个ClickHouse节点时,可使用ClickHouse分片副本集,一个ClickHouse分片节点创建两个或以上的ClickHouse分片副本集,此时需要将CollapsingMergeTree引擎表替换为ReplicatedCollapsingMergeTree引擎表,或将ClickHouse分片副本集中的VersionedCollapsingMergeTree引擎表替换为ReplicatedVersionedCollapsingMergeTree引擎表,使用Replicated类引擎表可以让同一个ClickHouse节点分片节点的副本自动同步数据,此时一个ClickHouse分片节点只需要同步数据到一个副本即可。以便于进行分区数据同步复制,由于分区数据同步复制会异步执行,所以可能会存在指标数据查询不一致的情况,用户可根据实际业务需求在分区容错性与数据一致之间进行权衡与选择。
实施例2:
本实施例在上述实施列1的基础上做案例说明,如实施例1所示,本方案使用业务数据库日志进行数据实时增量同步至ClickHouse节点,使用redis记录业务数据库日志读取位置,消息队列保存数据事件。业务数据库、数据实时同步、ClickHouse节点、redis、消息队列均可使用分布式部署,实现并行实时增量数据同步与并行实时增量统计。
接下来以实际应用案例进行说明,该案例使用MySQL作为业务数据库,使用kafaka作为消息队列,使用三个ClickHouse节点作为分片集群进行统计。
假设MySQL业务数据库中有一张就业信息表,表名为employment_info,保存所有人员的当前就业信息情况,该表中area_code字段表示行政区划,work_status字段表示就业情况,当work_status=1时表示已就业,且该字段会根据具体业务需求进行实时更新。项目上需要实时统计各个行政区域的就业人数,因为就业信息表数据量级为千万级,且根据业务需求需要频繁并发查询各个行政区域就业人数,为了减轻MySQL业务数据库的统计压力,并能在前端界面上实时展示统计结果,使用本方案实现并行实时增量统计,具体步骤如下:
步骤S1:在数据事件消费者配置MySQL业务数据库、kafka与ClickHouse集群地址及相关参数后启动,数据事件消费者先在ClickHouse集群中每个节点上创建CollapsingMergeTree引擎的本地表employment_info_local和分布式表employment_info_all,然后将MySQL业务数据库的employment_info就业信息表数据全量同步到ClickHouse节点的分布式表employment_info_all中。
步骤S2:在数据事件生产者配置MySQL业务数据库、redis、kafka的地址及相关参数后启动,数据事件生产者通过读取MySQL业务数据库中的binlog日志,产生的数据事件推送到kafka。
步骤S3:数据事件消费者在数据全量同步完成后转入增量同步操作模式,按照顺序消费kafka中的数据事件,并将数据事件同步到ClickHouse节点的分布式表employment_info_all中。
步骤S4:在ClickHouse集群的每个本地表employment_info_local上创建本地物化视图employment_info_view_local,从而在每个本地物化视图上统计各个行政区域的就业人数。
步骤S5:在ClickHouse集群的每个节点上创建分布式表employment_info_view,关联对应节点上的本地物化视图,从而将每个本地物化视图统计结果汇总。
由于本地物化视图会对本地表employment_info_local增量数据实现自动聚合并保存聚合结果,而查询分布式表employment_info_view会对本地物化视图结果数据进行合并。因此可对分布式表employment_info_view进行统计查询,从而实现各个行政区域的就业人数并行实时增量统计。
本发明通过监听业务数据库的操作日志,将业务数据同步到ClickHouse节点,使用ClickHouse节点的CollapsingMergeTree引擎表或VersionedCollapsingMergeTree引擎表来保存同步数据,通过状态字段“sign”的设置,将原本数据新增、修改、删除的操作换换为数据新增事件,从而将随机磁盘读写操作转换为顺序磁盘写操作,实现了亚秒级的数据实时增量同步。在此基础上,本发明借助ClickHouse节点的AggregatingMergeTree引擎物化视图的增量统计功能,将业务数据库的统计指标数据计算压力转移到ClickHouse节点,降低了开发实现复杂度,提高了指标数据计算性能,从而实现了指标高并发的亚秒级查询。
本发明还使用水平分表技术进行数据的分布式存储,通过分布式部署ClickHouse分片集群,从而支持并行数据同步与并行指标数据统计,解决了对频繁更新的海量数据进行并行实时增量统计的问题。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (9)
1.基于单机模式下数据库日志并行实时增量统计的方法,其特征在于:包括以下步骤:
步骤S1:启动数据事件消费者,创建ClickHouse节点对应的数据同步表,并将业务数据库表的全量数据同步到创建的数据同步表中;
步骤S2:启动数据事件生产者,按照redis记录的业务数据库日志位置的顺序读取业务数据库日志,根据先后读取业务数据库日志的顺序将其推送到消息队列;所述业务数据库日志包括数据新增事件、表结构变化事件;
步骤S3:事件数据消费者完成全量数据同步后,自动开启增量同步操作,消费消息队列中的数据新增事件和/或表结构变化事件,从而将数据新增事件和/或表结构变化事件同步到ClickHouse节点的数据同步表中;
步骤S4:根据指标数据的统计需求,基于ClickHouse节点对应的数据同步表创建AggregatingMergeTree引擎的物化视图,在物化视图创建语句中指定需要执行统计的SQL语句;
步骤S5:使用SQL语句对AggregatingMergeTree引擎的物化视图进行统计指标数据的结果查询。
2.根据权利要求1所述的基于单机模式下数据库日志并行实时增量统计的方法,其特征在于:所述步骤S1具体包括以下步骤:
步骤S11:启动数据事件消费者,启动后检查ClickHouse节点对应的数据同步表是否创建;
步骤S12:若未创建ClickHouse节点对应的数据同步表,则创建CollapsingMergeTree引擎表作为ClickHouse节点对应的数据同步表;所述CollapsingMergeTree引擎表的状态字段为sign,当sign为1时表示数据为有效,当sign为-1时表示数据为无效;
步骤S13:创建好ClickHouse节点对应的数据同步表后,将业务数据库表的全量数据同步到CollapsingMergeTree引擎表中;全量数据同步期间对同步的业务数据库表加上只读锁。
3.根据权利要求2所述的基于单机模式下数据库日志并行实时增量统计的方法,其特征在于:所述步骤S2具体包括以下步骤:
步骤S21:启动数据事件生产者,按照redis记录的业务数据库日志位置的顺序读取业务数据库日志,若redis尚未记录业务数据库日志,则从业务数据库日志的末尾开始读取;
步骤S22:若读取到数据新增日志,则转换为数据新增事件,并将状态字段sign设置为1;若读取到数据修改日志,则转换为两条数据新增事件,第一条是修改前数据,并将状态字段sign设置为-1,第二条是修改后数据,并将状态字段sign设置为1;若读取到数据删除日志,则转换为数据新增事件,并将状态字段sign设置为-1;
步骤S23:若读取到DDL操作日志,则转换为表结构变化事件,同时转换为ClickHouse节点对应的DDL语句;
步骤S24:将转换后的数据新增事件和表结构变化事件,按照读取业务数据库日志的顺序推送到消息队列。
4.根据权利要求3所述的基于单机模式下数据库日志并行实时增量统计的方法,其特征在于:若redis尚未记录业务数据库日志,则成功推送到消息队列后,将读取业务数据库日志的顺序记录在redis中。
5.根据权利要求3所述的基于单机模式下数据库日志并行实时增量统计的方法,其特征在于:所述步骤S3的具体步骤包括:对于消息队列中的数据新增事件,按照ClickHouse节点语法执行DML语句***数据;对于表结构变化事件,则执行转换后的DDL语句,从而将数据新增事件和/或表结构变化事件同步到ClickHouse节点的数据同步表中。
6.根据权利要求1所述的基于单机模式下数据库日志并行实时增量统计的方法,其特征在于:所述步骤S4具体包括以下步骤:
步骤S41:根据统计需求,基于ClickHouse节点对应同步的CollapsingMergeTree引擎表创建AggregatingMergeTree引擎的物化视图;
步骤S42:在AggregatingMergeTree引擎的物化视图创建语句中,指定需要执行统计的SQL语句,并做部分统计SQL语句指标转换,从而避免状态字段为无效的数据被统计。
7.基于分布式部署的数据库日志并行实时增量统计的方法,其特征在于:包括以下步骤:
步骤S1:部署多个数据事件消费者与多个ClickHouse节点,构成ClickHouse分片集群,ClickHouse节点的数量与业务数据库分片节点数量保持一致,一个数据事件消费者负责同步一个对应业务数据库分片节点的数据到一个ClickHouse节点中;
步骤S2:部署多个数据事件生产者,一个数据事件生产者负责一个业务数据库分片节点的数据库日志读取;
当某个数据事件生产者启动后,执行权利要求1所述方法的步骤S2;
步骤S3:每个数据事件消费者负责对应的业务数据库分片节点数据事件的自动增量同步操作,从而将业务数据库分片节点的数据事件同步到对应的ClickHouse节点中;
步骤S4:使用ClickHouse分片集群中每个节点同步的业务数据库的数据同步表创建本地物化视图;
步骤S5:在每个ClickHouse节点创建分布式表,将分布式表关联本地物化视图,使用SQL语句对ClickHouse分片集群中任意节点的分布式表进行统计指标数据的结果查询。
8.根据权利要求7所述的基于分布式部署的数据库日志并行实时增量统计的方法,其特征在于:所述步骤S1的具体步骤为:
步骤S11:启动每个数据事件消费者,启动后检查对应的ClickHouse节点的数据同步表是否创建;
步骤S12:若未创建ClickHouse节点对应的数据同步表,则创建CollapsingMergeTree引擎表作为ClickHouse节点对应的数据同步表,或者创建VersionedCollapsingMergeTree引擎表作为ClickHouse节点对应的数据同步表;
所述CollapsingMergeTree引擎表的状态字段为sign,当sign为1时表示数据为有效,当sign为-1时表示数据为无效;
该ClickHouse节点对应的业务数据库分片节点的业务数据库日志更新时间作戳作为所述VersionedCollapsingMergeTree引擎表的版本字段,保证VersionedCollapsingMergeTree引擎表在业务数据库日志合并时可以根据主键加版本字段进行合并,而不受业务数据库日志的顺序影响;
步骤S13:创建好ClickHouse节点对应的数据同步表后,将业务数据库表的全量数据同步到CollapsingMergeTree引擎表或VersionedCollapsingMergeTree引擎表中。
9.根据权利要求8所述的基于分布式部署的数据库日志并行实时增量统计的方法,其特征在于:所述步骤S1具体为:在部署多个ClickHouse节点时,对于一个ClickHouse节点创建两个或以上ClickHouse分片副本集;将ClickHouse分片副本集中的CollapsingMergeTree引擎表替换为ReplicatedCollapsingMergeTree引擎表,或将ClickHouse分片副本集中的VersionedCollapsingMergeTree引擎表替换为ReplicatedVersionedCollapsingMergeTree引擎表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111220905.6A CN114153809A (zh) | 2021-10-20 | 2021-10-20 | 基于数据库日志并行实时增量统计的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111220905.6A CN114153809A (zh) | 2021-10-20 | 2021-10-20 | 基于数据库日志并行实时增量统计的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114153809A true CN114153809A (zh) | 2022-03-08 |
Family
ID=80462478
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111220905.6A Pending CN114153809A (zh) | 2021-10-20 | 2021-10-20 | 基于数据库日志并行实时增量统计的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114153809A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114996353A (zh) * | 2022-05-26 | 2022-09-02 | 厦门立林科技有限公司 | 一种分布式的智能实时数据流分发方法及*** |
CN116150175A (zh) * | 2023-04-18 | 2023-05-23 | 云账户技术(天津)有限公司 | 一种面向异构数据源的数据一致性校验方法及装置 |
CN117149914A (zh) * | 2023-10-27 | 2023-12-01 | 成都优卡数信信息科技有限公司 | 一种基于ClickHouse的存储方法 |
-
2021
- 2021-10-20 CN CN202111220905.6A patent/CN114153809A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114996353A (zh) * | 2022-05-26 | 2022-09-02 | 厦门立林科技有限公司 | 一种分布式的智能实时数据流分发方法及*** |
CN116150175A (zh) * | 2023-04-18 | 2023-05-23 | 云账户技术(天津)有限公司 | 一种面向异构数据源的数据一致性校验方法及装置 |
CN117149914A (zh) * | 2023-10-27 | 2023-12-01 | 成都优卡数信信息科技有限公司 | 一种基于ClickHouse的存储方法 |
CN117149914B (zh) * | 2023-10-27 | 2024-01-26 | 成都优卡数信信息科技有限公司 | 一种基于ClickHouse的存储方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11921746B2 (en) | Data replication method and apparatus, computer device, and storage medium | |
CN111723160B (zh) | 一种多源异构增量数据同步方法及*** | |
CN114153809A (zh) | 基于数据库日志并行实时增量统计的方法 | |
KR102307371B1 (ko) | 데이터베이스 시스템 내의 데이터 복제 및 데이터 장애 조치 | |
Brewer | Spanner, truetime and the cap theorem | |
US20150032695A1 (en) | Client and server integration for replicating data | |
US20130110873A1 (en) | Method and system for data storage and management | |
US9672244B2 (en) | Efficient undo-processing during data redistribution | |
CN111125260A (zh) | 一种基于SQL Server的数据同步方法及*** | |
JP7438603B2 (ja) | トランザクション処理方法、装置、コンピュータデバイス及びコンピュータプログラム | |
US20100169302A1 (en) | System, method, and computer-readable medium for grouping database level object access counts per processing module in a parallel processing system | |
CN111259004B (zh) | 一种存储引擎中数据索引的方法以及相关装置 | |
CN109298978B (zh) | 一种指定位置的数据库集群的恢复方法及*** | |
CN110245134B (zh) | 一种应用于搜索服务的增量同步方法 | |
CN114579614A (zh) | 一种实时数据全量获取方法、装置及计算机设备 | |
CN110489092B (zh) | 一种数据库读写分离架构下读取数据延迟问题的解决方法 | |
WO2023077971A1 (zh) | 事务处理方法、装置、计算设备及存储介质 | |
CN111917834A (zh) | 一种数据同步方法、装置、存储介质及计算机设备 | |
CN112328702A (zh) | 数据同步方法及*** | |
Wang et al. | Apache IoTDB: A time series database for IoT applications | |
CN115114294A (zh) | 数据库存储模式的自适应方法、装置、计算机设备 | |
CN115292414A (zh) | 一种业务数据同步到数仓的方法 | |
US9201685B2 (en) | Transactional cache versioning and storage in a distributed data grid | |
Yao et al. | Relational Database Query Optimization Strategy Based on Industrial Internet Situation Awareness System | |
CN110879812A (zh) | 一种电商平台中基于spark的数据同步方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |