掌桥专利:专业的专利平台
掌桥专利
首页

一种PostgreSQL数据库同步方法和系统

文献发布时间:2023-06-19 12:19:35


一种PostgreSQL数据库同步方法和系统

技术领域

本发明涉及大数据领域,特别涉及一种PostgreSQL数据库同步方法和系统。

背景技术

目前搜索引擎ElasticSearch库中的数据维护,是通过应用层业务代码对主数据库PostgreSQL数据变更时,同时调用ElasticSearch相关接口同步数据到ElasticSearch中,实现PostgreSQL主数据与ElasticSearch数据的相对同步。上述数据同步过程实现复杂,搜索引擎ElasticSearch库中的数据维护依赖于应用层的业务逻辑,而业务层的逻辑一般较复杂,ElasticSearch库的数据同步脚本须注入到每个相关的业务代码中;可维护性差,随着业务的发展,业务代码日益繁杂,EalsticSearch库的数据同步工作也越来越难。

发明内容

本发明其中一个发明目的在于提供一种PostgreSQL数据库同步方法和系统,所述方法和系统通过建立多个线程的Kafka消息队列,将种PostgreSQL数据库中的数据通过格式转换同步到ElasticSearch数据库中,可以实现快速的数据同步。

本发明其中一个发明目的在于提供一种PostgreSQL数据库同步方法和系统,所述方法和系统通过KafkaConnector实现分布式部署,可以减少数据拥堵现象。

本发明另一个发明目的在于提供一种PostgreSQL数据库同步方法和系统,所述方法和系统采用分区算法,通过配置参数可以实现灵活地定义分区键,可以将相同特征的数据库同步到相同分区中,用于签收数据的有序消费和存储。

本发明另一个发明目的在于提供一种PostgreSQL数据库同步方法和系统,所述方法和系统设置了debezium插件,所述debezium插件被配置在Kafka集群中,可以实现对PostgreSQL数据库中特定数据表的实时抓取,减少数据同步延时。

本发明另一个发明目的在于提供一种PostgreSQL数据库同步方法和系统,所述方法和系统设置多个线程消费Kafka消息队列中的topic数据,当每个线程在拉取topic数据后执行一段休眠操作,可以保障每个消费端可以正常消费topic数据。

为了实现至少一个上述发明目的,本发明进一步提供一种PostgreSQL数据库同步方法,所述方法包括如下步骤:

获取PostgreSQL数据库的WAL日志;

配置并注册Kafka Connector,以连接PostgreSQL数据库和Kafka集群;

监听所述WAL日志,并将监听获取的WAL日志数据存储到Kafka partition中;

消费Kafka集群中的topic数据,并将获取的topic数据封装成Json格式数据,并将封装后的Json格式数据同步到ElasticSearch数据库中。

根据本发明其中一个较佳实施例,配置并注册Kafka Connector后创建Kafkatopic,并指定Kafka集群中的分区,在kafka libs库中设置debezium插件,用于实时监听postgreSQL数据库。

根据本发明另一个较佳实施例,所述同步方法还包括如下步骤:

配置算法参数建立kafka分区算法,并设定kafka分区数;

根据分区算法定义分区键,并计算每一分区的分区值;

根据所述分区值将相同特征的topic数据存储于同一分区中。

根据本发明另一个较佳实施例,所述分区值的计算方法为:

获取配置参数中指定字段,并计算所述指定字段的机器码;

根据所述指定字段机器码进行取模计算。

根据本发明另一个较佳实施例,所述同步方法包括如下步骤:

设置线程配置参数,根据所述线程配置参数生成多个线程;

根据所述线程配置参数启动多个线程,并每个启动的线程单独监听Kafka集群中指定的topic下的数据。

根据本发明另一个较佳实施例,所述线程监听topic数据的方法还包括如下步骤:每个线程获取监听的topic下的数据后,根据线程配置参数控制该线程休眠指定时间。

根据本发明另一个较佳实施例,启动线程监听后,若在监听WAL日志过程中发现WAL日志数据变更,则调用maycurPartitioner类中的apply函数计算分区键,并根据所述分区算法计算变更后WAL日志数据分区值,根据计算的分区值将更新后的WAL日志数据存储到指定Kafka分区。

根据本发明另一个较佳实施例,在topic数据封装成Json格式数据的过程中还包括如下步骤:

获取topic下的变更数据,判断获取该变更数据的企业是否存在签收设置,若无则不在处理获取的变更数据;

判断是变更数据中是否具有删除字段指令;若具有,则调用ElasticSearch接口将变更数据删除;

若判断变更数据为更新数据,则将所述更新数据转换为Json格式数据的实体对象,并将更新数据中需要模糊查询的字段进行分词操作。

为了实现至少一个上述发明目的,本发明进一步提供一种PostgreSQL数据库同步系统,所述系统采用并执行上述一种PostgreSQL数据库同步方法。

本发明进一步提供一种计算机可读存储介质,所述计算机可读存储介质保存并应用上述一种PostgreSQL数据库同步系统。

附图说明

图1显示的是本发明一种PostgreSQL数据库同步方法流程示意图。

图2显示的是本发明中分区算法的一种流程示意图。

具体实施方式

以下描述用于揭露本发明以使本领域技术人员能够实现本发明。以下描述中的优选实施例只作为举例,本领域技术人员可以想到其他显而易见的变型。在以下描述中界定的本发明的基本原理可以应用于其他实施方案、变形方案、改进方案、等同方案以及没有背离本发明的精神和范围的其他技术方案。

可以理解的是,术语“一”应理解为“至少一”或“一个或多个”,即在一个实施例中,一个元件的数量可以为一个,而在另外的实施例中,该元件的数量可以为多个,术语“一”不能理解为对数量的限制。

请结合图1,本发明提供了一种PostgreSQL数据库同步方法和系统,其中所述方法主要包括如下步骤:首先需要开启PostgreSQL数据库的日志功能,配置PostgreSQL数据库的账号和权限,进一步配置和注册Kafka Connector,需要说明的是,Kafka Connector是一种可以将数据从数据库收集到Kafka topic下的数据传输工具,可以实现从数据库到Kafka集群的低延迟传输,Kafka Connector通过不同的接口实现分布式的环境部署,从而降低数据库同步的延时。

在注册Kafka Connector过程中,需要创建Kafka topic,用于将PostgreSQL数据库和Kafka集群建立通讯链接,在本发明其中一个较佳实施例中,在创建Kafka topic过程中需要指定3个Kafka分区,并分别设置所述3个Kafka分区的地址,举例来说:通过指令可设置partition1、partition2,partition3三个分区,且对应3个分区的地址可设置为:192.168.95.158:2181,192.168.95.159:2181,192.168.95.160:2181。需要说明的是每个topic可以指定多个分区(partition),且消息在每个topic的分区内都具有唯一有序ID,该ID为offset,在上述Kafka Connector注册过程中,进一步将debezium插件存储至kafkalibs库中,用于实时监控PostgreSQL数据库的数据变化,并实时抓取变化的数据。需要说明的是所述debezium插件可以通过配置参数抓取PostgreSQL数据库中指定的数据列表。从而可以实现定向抓取监控的技术效果。

本发明通过Kafka集群将PostgreSQL数据库中的数据同步到ElasticSearch数据库中,在同步过程中,需要对PostgreSQL数据库中的WAL日志数据进行格式转换,格式转换的方式包括:将配置中plugin.name参数的值修改为:wal2json_streaming,从而可以将wal日志数据格式转换为json格式数据,并将所述json格式数据同步至ElasticSearch数据库中。

值得一提的是,为了将从PostgreSQL数据库获取的WAL日志数据保存到指定的Kafka集群中,本发明进一步提供一种Kafka分区算法,所述分区算法包括设定分区数,其中将transforms.maycurPartitioner.num.partitionse参数值设置为3个则可以设定上述三个Kafka分区,进一步的,计算指定字段的分区值,并将相同分区值的数据保存于同一分区中,从而使得相同特征的WAL日志数据可以保存在同一分区中,保障了WAL日志数据的有序存储和消费。举例来说:通过设置程序代码中transforms.maycurPartitioner.key.list字段为:form_data_code,reimburse_data_code,corp_reimburse_data_code,计算该字段单据号(form_data_code)的字段值,并将该字段值作为分区值的,其中该字段值的计算方法包括:获取该字段在计算机中的机器码,并对所述机器码进行取模计算,将取模计算的结果作为该字段(form_data_code)的字段值,同时也将计算结果作为该字段的分区值。将该分区值的数据存储于相同的分区中,从而完成同类型数据的有序存储和消费。需要说明的是,本发明中还可以将WAL日志数据中其他具有多个同类型的字段嵌入上述需要分区值计算的代码中,并将具有不同分区值的WAL日志数据分类保存。

为了更好的说明本发明,本发明提供了图2所述的分区算法流程示意图,首先需要读取WAL日志数据,并获取的WAL日志数据中的配置信息;判断WAL日志数据所在的topic是否是为配置中的topic,若是则进一步判断是否存在分区键字段;若存在则进一步将配置项所配置的字段进行分区值计算,将所述分区值计算结果返回,并根据所述分区值将所述WAL日志数据存储在指定的Kafka分区中。当启动对PostgreSQL数据库的WAL日志数据监听时,判断监听的数据是否发生改变,若未发生改变则不作处理;若发生改变,则调用maycurPartitioner类中的apply函数计算分区键,并计算指定字段的分区值,从而将更新的WAL日志数据存储于指定的Kafka分区中。

为了减少数据拥堵,本发明进一步在消费端执行多线程对topic数据的消费,多线程topic数据的消费方法包括如下步骤:设置线程配置参数,将所述线程配置参数设置为多个,其中所述线程配置参数为:afka.consumer.thread.num.sign.for,根据线程的参数配置执行对应线程的启动操作。配置线程监听参数,所述线程监听参数为kafka.topic.sign.for,通过修改线程监听配置参数就可以实现对指定topic下数据的监听,进一步将监听的结果反馈给kafka集群,通过所述kafka集群上传,用于获取数据消费状态。值得一提的是,本发明设置定时休眠指令,配置kafka.duration.mills参数,当每一线程每次拉取topic下数据时,将控制线程持续休眠一段时间,从而保障消费端的正常数据消费。

在将wal日志数据进行数据转换,转换为适配ElasticSearch数据库的数据格式的过程中,还进行如下操作:获取topic下的变更数据,判断接收企业是否存在签收设置,若无则直接跳过,不再对topic下的变更数据进行处理;

以及根据变更的topic下数据的“OP”字段,判断该字段下是否存在删除指令,若存在删除指令,则根据单据号调用ElasticSearch接口将变更数据删除;

判断变更数据是否为更新操作,若是则将更新数据封装为适配ElasticSearch数据库Json格式的实体对象(SignForTask),并将变更数据的配置参数中需要模糊查询的字段进行分词操作。

需要说明的是,本发明上述方法提供了一种从PostgreSQL数据库到ElasticSearch数据库的同步方法,该数据同步方法是基于Kafka集群的同步操作,涉及到对PostgreSQL数据库的实时监听和分区存储和业务处理,无需在ElasticSearch数据库注入复杂的业务代码,可以实现有序高效的数据同步和业务处理。

特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分从网络上被下载和安装,和/或从可拆卸介质被安装。在该计算机程序被中央处理单元(CPU)执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线段、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线段的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线段、电线段、光缆、RF等等,或者上述的任意合适的组合。

附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

本领域的技术人员应理解,上述描述及附图中所示的本发明的实施例只作为举例而并不限制本发明,本发明的目的已经完整并有效地实现,本发明的功能及结构原理已在实施例中展示和说明,在没有背离所述原理下,本发明的实施方式可以有任何变形或修改。

相关技术
  • 一种PostgreSQL数据库同步方法和系统
  • 一种基于postgresql数据库的嵌入式系统管理方法
技术分类

06120113255759