一种数据写入方法、装置、设备及存储介质与流程

文档序号:35347381发布日期:2023-09-07 20:51阅读:24来源:国知局
一种数据写入方法、装置、设备及存储介质与流程

本技术涉及数据处理,特别涉及一种数据写入方法、装置、设备及存储介质。


背景技术:

1、目前,为了保证数据的实时性、准确性和可靠性,会通过cdc(change datacapture,变更数据捕获)日志实时获取mysql(一种关系型数据库管理系统)/tdsql(tencent distributed sql,分布式数据库)/oracle(一款关系数据库管理系统)等数据库的增量变化数据,然后通过大数据存储对上述增量变化数据进行及时地同步,以此来保证数据的准确性,避免由于数据重复或数据丢失等问题导致的数据不一致。

2、例如,在企业应用中,通常会涉及到多个业务系统和应用程序,而这些业务系统和应用程序通常使用不同的数据库甚至是不同的数据存储方式。由于不同的业务需要处理不同的数据,因此需要通过不同的源表对其进行存储和管理。并且,为了满足企业应用中的不同性能需求,还需要使用不同的数据存储方式对数据进行存储。另外,在企业应用中,通常还需要使用不同的数据源将不同的系统集成在一起,从而实现数据的共享和交互,并且为了方便及时的进行数据分析和决策,还会将这些数据实时的保存到分布式存储系统(如hdfs(hadoop distributed filesystem,分布式文件系统)、hudi(一个通用的大数据存储系统))中以方便进行数据分析和数据查询,从而提高数据分析和决策的效率和准确性。

3、然而,在企业的数据库中,通常会存在大量的表,且这些表的cdc日志数据会被写入到一个消息队列的主题中,并且会对消费消息队列中的数据进行消费,然后将其并发写入到大量的分布式存储表中。目前,主流的分布式存储系统写表方法是通过分布式计算引擎以单线程的方式进行分布式存储系统的写表的,由于单线程的限制,这种写入方式可能会导致写入请求排队等待、写入效率低下,并且无法满足低延迟同步数据到分布式存储系统的性能要求。此外,多个应用程序并行消费消息队列进行写表会消耗大量的计算资源,且导致消息队列消费吞吐量激增、大量数据被重复消费,不仅浪费了计算资源,还降低了计算效率。另外,在数据同步的过程中,如果消息队列主题的某个分区中的数据量过大而其他分区数据量较小时,会使消息队列单分区数据倾斜现象加重,进而加剧数据同步的延迟,甚至无法满足实时同步的需求。


技术实现思路

1、有鉴于此,本技术的目的在于提供一种数据写入方法、装置、设备及存储介质,能够减少对单张表的写入压力,提高数据写入的效率,避免潜在的性能瓶颈和数据损失,减少系统的负载,降低系统的运行成本,同时确保了数据同步的实时性、准确性和可靠性。其具体方案如下:

2、第一方面,本技术公开了一种数据写入方法,包括:

3、从消息队列主题的单个分区中获取目标数据库中数据库表的cdc日志数据;

4、对所述cdc日志数据进行划分,得到多个划分后日志数据,并将所述划分后日志数据分配到多个不同分区中;

5、对各个所述不同分区中的所述划分后日志数据进行分表处理,得到多个日志数据表;

6、分别对各个所述日志数据表中的日志数据进行重新分区,得到多个划分后数据表,并对各个所述划分后数据表中的日志数据进行局部重排序,得到排序后日志数据,再将所述排序后日志数据并发写入至分布式存储表中。

7、可选的,所述对各个所述不同分区中的所述划分后日志数据进行分表处理,得到多个日志数据表,包括:

8、将各个所述不同分区中的所述划分后日志数据做成缓存,并将所述缓存保存至内存中;

9、对所述内存中的所述划分后日志数据进行分表处理,得到多个日志数据表。

10、可选的,所述分别对各个所述日志数据表中的日志数据进行重新分区,得到多个划分后数据表,包括:

11、按照所述日志数据表的主键对所述日志数据表中的日志数据进行重新分区,得到多个划分后数据表。

12、可选的,所述对各个所述划分后数据表中的日志数据进行局部重排序,得到排序后日志数据,包括:

13、按照所述划分后数据表的主键以及待进入主题分区的偏移量对所述划分后数据表中的日志数据进行局部重排序,得到排序后日志数据。

14、可选的,所述将所述排序后日志数据并发写入至分布式存储表中,包括:

15、为各个所述排序后日志数据创建分布式存储写表任务,并按照预设的分区大小对各个所述分布式存储写表任务进行哈希取余计算,得到计算结果;

16、利用所述计算结果为每个所述分布式存储写表任务打标号,并按照所述标号对所述分布式存储写表任务进行分组,得到多组任务分区,再将多组所述任务分区依次推入至预先创建的分布式存储写任务并发队列中;其中,所述标号小于所述预设的分区大小;

17、将所述分布式存储写任务并发队列中的所有所述分布式存储写表任务依次提交到预先创建的线程池中,以将所述排序后日志数据并发写入至分布式存储表中;所述线程池运行在分布式应用主驱动程序中。

18、可选的,所述数据写入方法,还包括:

19、通过预先为每个所述分布式存储写表任务配置的监听器对所述分布式存储写表任务的执行过程进行监听,并将所述分布式存储写表任务的执行结果封装后保存至预先创建的执行结果存储队列中。

20、可选的,所述数据写入方法,还包括:

21、当所有所述分布式存储写表任务提交到所述线程池之后,通过调用计数锁对所述分布式应用主驱动程序进行阻塞,并在所述分布式存储写表任务执行完成后解除对所述分布式应用主驱动程序的阻塞。

22、第二方面,本技术公开了一种数据写入装置,包括:

23、日志数据获取模块,用于从消息队列主题的单个分区中获取目标数据库中数据库表的cdc日志数据;

24、数据划分及分配模块,用于对所述cdc日志数据进行划分,得到多个划分后日志数据,并将所述划分后日志数据分配到多个不同分区中;

25、日志数据分表模块,用于对各个所述不同分区中的所述划分后日志数据进行分表处理,得到多个日志数据表;

26、日志数据分区模块,用于分别对各个所述日志数据表中的日志数据进行重新分区,得到多个划分后数据表;

27、局部排序模块,用于对各个所述划分后数据表中的日志数据进行局部重排序,得到排序后日志数据;

28、并发写入模块,用于将所述排序后日志数据并发写入至分布式存储表中。

29、第三方面,本技术公开了一种电子设备,包括处理器和存储器;其中,所述处理器执行所述存储器中保存的计算机程序时实现前述的数据写入方法。

30、第四方面,本技术公开了一种计算机可读存储介质,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现前述的数据写入方法。

31、可见,本技术先从消息队列主题的单个分区中获取目标数据库中数据库表的cdc日志数据,然后对所述cdc日志数据进行划分,得到多个划分后日志数据,并将所述划分后日志数据分配到多个不同分区中,接着对各个所述不同分区中的所述划分后日志数据进行分表处理,得到多个日志数据表,再分别对各个所述日志数据表中的日志数据进行重新分区,得到多个划分后数据表,并对各个所述划分后数据表中的日志数据进行局部重排序,得到排序后日志数据,最后将所述排序后日志数据并发写入至分布式存储表中。本技术通过对单个分区中的日志数据进行二次重分区及局部排序,并通过低延迟的方式将单分区中的cdc日志数据刷入到多张分布式存储表中,能够减少对单张表的写入压力,提高数据写入的效率,避免潜在的性能瓶颈和数据损失,减少系统的负载,降低系统的运行成本,同时确保了数据同步的实时性、准确性和可靠性,有效避免了单分区数据倾斜现象。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1