本發(fā)明涉及互聯(lián)網(wǎng)領域,具體而言,涉及一種數(shù)據(jù)的同步方法和裝置。
背景技術:
Skytools是一個最初由Skype開發(fā)的軟件包,是一個工具與服務的集合。這個工具用于解決多個PostgreSQL數(shù)據(jù)庫之間的復制,同步傳輸?shù)葐栴}。
在現(xiàn)有技術中,Skytools可以滿足同構系統(tǒng)(即PostgreSQL數(shù)據(jù)庫)之間的實時增量數(shù)據(jù)同步。但是,隨著計算機技術的發(fā)展,異構系統(tǒng)(比如消息系統(tǒng)Kafka、搜索引擎系統(tǒng)Elasticsearch、nosql數(shù)據(jù)庫系統(tǒng)Mongodb、緩存系統(tǒng)Redis、大數(shù)據(jù)計算引擎系統(tǒng)Impala等等)的出現(xiàn),PostgreSQL數(shù)據(jù)庫與這些異構系統(tǒng)之間的實時增量數(shù)據(jù)同步的需求也越來越強烈。然后Skytools的現(xiàn)有功能并不能滿足這些需求。
針對相關技術中數(shù)據(jù)庫與異構系統(tǒng)之間不能進行實時增量數(shù)據(jù)同步的技術問題,目前尚未提出有效的解決方案。
技術實現(xiàn)要素:
本發(fā)明實施例提供了一種數(shù)據(jù)的同步方法和裝置,以至少解決相關技術中數(shù)據(jù)庫與異構系統(tǒng)之間不能進行實時增量數(shù)據(jù)同步的技術問題。
根據(jù)本發(fā)明實施例的一個方面,提供了一種數(shù)據(jù)的同步方法,該方法包括:在目標數(shù)據(jù)庫中存在增量數(shù)據(jù)的情況下,獲取增量數(shù)據(jù)和目標數(shù)據(jù)庫的配置信息;將增量數(shù)據(jù)同步至配置信息所指示的一個或多個系統(tǒng),其中,一個或多個系統(tǒng)為配置信息中與增量數(shù)據(jù)的數(shù)據(jù)類型對應的異構系統(tǒng)。
進一步地,將增量數(shù)據(jù)同步至配置信息所指示的一個或多個系統(tǒng)包括:將增量數(shù)據(jù)發(fā)送至消息系統(tǒng),由消息系統(tǒng)將增量數(shù)據(jù)同步至一個或多個系統(tǒng),其中,消息系統(tǒng)為Kafka消息系統(tǒng)。
進一步地,將增量數(shù)據(jù)發(fā)送至消息系統(tǒng)包括:利用Skytools工具集中的第一應用程序編程接口發(fā)送增量數(shù)據(jù)至消息系統(tǒng),其中,第一應用程序編程接口為Skytools工具集的pgq子集中的應用程序編程接口。
進一步地,方法還包括在利用Skytools工具集中的第一應用程序編程接口發(fā)送增量數(shù)據(jù)至消息系統(tǒng)之后,接收第一應用程序編程接口的回應信息,其中,在接收到回應信息的情況下,確認將增量數(shù)據(jù)發(fā)送至消息系統(tǒng)的操作執(zhí)行成功。
進一步地,一個或多個系統(tǒng)包括以下至少之一:搜索引擎系統(tǒng)Elasticsearch、數(shù)據(jù)庫系統(tǒng)Mongodb、緩存系統(tǒng)Redis以及大數(shù)據(jù)計算引擎系統(tǒng)Impala。
進一步地,獲取增量數(shù)據(jù)包括:利用Skytools工具集中的第二應用程序編程接口讀取目標數(shù)據(jù)庫中的增量數(shù)據(jù),其中,第二應用程序編程接口為Skytools工具集的pgq子集中的應用程序編程接口。
進一步地,目標數(shù)據(jù)庫包括PostgreSQL類型的數(shù)據(jù)庫。
根據(jù)本發(fā)明實施例的另一個方面,提供了一種數(shù)據(jù)的同步裝置,該裝置包括:獲取單元,用于在目標數(shù)據(jù)庫中存在增量數(shù)據(jù)的情況下,獲取增量數(shù)據(jù)和目標數(shù)據(jù)庫的配置信息;同步單元,用于將增量數(shù)據(jù)同步至配置信息所指示的一個或多個系統(tǒng),其中,一個或多個系統(tǒng)為配置信息中與增量數(shù)據(jù)的數(shù)據(jù)類型對應的異構系統(tǒng)。
進一步地,同步單元還用于將增量數(shù)據(jù)發(fā)送至消息系統(tǒng),由消息系統(tǒng)將增量數(shù)據(jù)同步至一個或多個系統(tǒng),其中,消息系統(tǒng)為Kafka消息系統(tǒng)。
進一步地,同步單元包括:發(fā)送模塊,用于利用Skytools工具集中的第一應用程序編程接口發(fā)送增量數(shù)據(jù)至消息系統(tǒng),其中,第一應用程序編程接口為Skytools工具集的pgq子集中的應用程序編程接口。
通過上述實施例,在目標數(shù)據(jù)庫中存在增量數(shù)據(jù)的情況下,獲取增量數(shù)據(jù)和目標數(shù)據(jù)庫的配置信息;將增量數(shù)據(jù)同步至配置信息所指示的一個或多個系統(tǒng),一個或多個系統(tǒng)為配置信息中與增量數(shù)據(jù)的數(shù)據(jù)類型對應的異構系統(tǒng)。從而解決了相關技術中數(shù)據(jù)庫與異構系統(tǒng)之間不能進行實時增量數(shù)據(jù)同步的技術問題,實現(xiàn)了在數(shù)據(jù)庫與異構系統(tǒng)之間進行實時增量數(shù)據(jù)同步的技術效果。
附圖說明
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構成對本發(fā)明的不當限定。在附圖中:
圖1是根據(jù)本發(fā)明實施例的數(shù)據(jù)的同步方法的流程圖;
圖2是根據(jù)本發(fā)明實施例的數(shù)據(jù)的同步裝置的示意圖。
具體實施方式
下文中將參考附圖并結合實施例來詳細說明本發(fā)明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。
需要說明的是,本發(fā)明的說明書和權利要求書及上述附圖中的術語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。
首先,在對本發(fā)明實施例進行描述的過程中出現(xiàn)的部分名詞或術語適用于如下解釋:
PostgreSQL:是一個開源的、社區(qū)驅動的、自由的且符合標準的對象-關系型數(shù)據(jù)庫系統(tǒng)。
Kafka:Apache Kafka是由Apache軟件基金會開發(fā)的一個開源消息系統(tǒng)項目,由Scala寫成。Kafka最初是由LinkedIn開發(fā),并于2011年初開源的軟件系統(tǒng)。
Elasticsearch:ElasticSearch是一個基于Lucene的搜索服務器。它提供了一個具備分布式多用戶能力的全文搜索引擎,基于RESTful web接口實現(xiàn)。Elasticsearch是用Java開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是當前流行的企業(yè)級搜索引擎。
Redis:是一個開源的、支持網(wǎng)絡的、基于內存的鍵值對存儲數(shù)據(jù)庫,使用ANSI C編寫。根據(jù)相關數(shù)據(jù)顯示,Redis是最流行的鍵值對存儲數(shù)據(jù)庫。
Mongodb:MongoDB是一種文檔導向的數(shù)據(jù)庫管理系統(tǒng),由C++撰寫而成,以此來解決應用程序開發(fā)社區(qū)中的大量問題。
Impala:Impala是一種新型查詢系統(tǒng),它提供SQL語義,能查詢存儲在Hadoop的HDFS和HBase中的PB級大數(shù)據(jù)。Impala的最大特點是的速度快。
為了可以滿足PostgreSQL數(shù)據(jù)庫與異構系統(tǒng),比如消息系統(tǒng)(Kafka)、搜索引擎系統(tǒng)(Elasticsearch)、nosql數(shù)據(jù)庫系統(tǒng)(Mongodb)、緩存系統(tǒng)(Redis)、大數(shù)據(jù)計算引擎系統(tǒng)(Impala)之間的實時增量同步數(shù)據(jù)。根據(jù)本發(fā)明實施例,提供了一種數(shù)據(jù)的同步方法的方法實施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
圖1是根據(jù)本發(fā)明實施例的數(shù)據(jù)的同步方法的流程圖,如圖1所示,該方法包括如下步驟:
步驟S101,在目標數(shù)據(jù)庫中存在增量數(shù)據(jù)的情況下,獲取增量數(shù)據(jù)和目標數(shù)據(jù)庫的配置信息。
步驟S102,將增量數(shù)據(jù)同步至配置信息所指示的一個或多個系統(tǒng),一個或多個系統(tǒng)為配置信息中與增量數(shù)據(jù)的數(shù)據(jù)類型對應的異構系統(tǒng)。
通過上述實施例,在目標數(shù)據(jù)庫中存在增量數(shù)據(jù)的情況下,獲取增量數(shù)據(jù)和目標數(shù)據(jù)庫的配置信息;將增量數(shù)據(jù)同步至配置信息所指示的一個或多個系統(tǒng),一個或多個系統(tǒng)為配置信息中與增量數(shù)據(jù)的數(shù)據(jù)類型對應的異構系統(tǒng)。從而解決了相關技術中數(shù)據(jù)庫與異構系統(tǒng)之間不能進行實時增量數(shù)據(jù)同步的技術問題,實現(xiàn)了在數(shù)據(jù)庫與異構系統(tǒng)之間進行實時增量數(shù)據(jù)同步的技術效果。
可選地,一個或多個系統(tǒng)包括以下至少之一:搜索引擎系統(tǒng)Elasticsearch、數(shù)據(jù)庫系統(tǒng)Mongodb、緩存系統(tǒng)Redis以及大數(shù)據(jù)計算引擎系統(tǒng)Impala。上述的目標數(shù)據(jù)庫包括PostgreSQL類型的數(shù)據(jù)庫。
在步驟S101中,獲取增量數(shù)據(jù)包括:利用Skytools工具集中的第二應用程序編程接口讀取目標數(shù)據(jù)庫中的增量數(shù)據(jù),其中,第二應用程序編程接口為Skytools工具集的pgq子集中的應用程序編程接口。
具體地,在Skytools工具集中,有個子集,叫做pgq。使用python語言實現(xiàn),調用消息系統(tǒng)(Kafka)的相關應用程序接口api,將實時增量數(shù)據(jù)同步到消息系統(tǒng)中。并且通過api調用成功后進行標記,api調用失敗以后不斷進行重試,來保證數(shù)據(jù)不會漏傳輸也不會重復傳輸,每條數(shù)據(jù)都傳輸一次,而且僅僅被傳輸一次。
在步驟S102中,將增量數(shù)據(jù)同步至配置信息所指示的一個或多個系統(tǒng)包括:將增量數(shù)據(jù)發(fā)送至消息系統(tǒng),由消息系統(tǒng)將增量數(shù)據(jù)同步至一個或多個系統(tǒng),其中,消息系統(tǒng)為Kafka消息系統(tǒng)。
具體地,將增量數(shù)據(jù)發(fā)送至消息系統(tǒng)包括:利用Skytools工具集中的第一應用程序編程接口發(fā)送增量數(shù)據(jù)至消息系統(tǒng),其中,第一應用程序編程接口為Skytools工具集的pgq子集中的應用程序編程接口。
可選地,在利用Skytools工具集中的第一應用程序編程接口發(fā)送增量數(shù)據(jù)至消息系統(tǒng)之后,接收第一應用程序編程接口的回應信息,其中,在接收到回應信息的情況下,確認將增量數(shù)據(jù)發(fā)送至消息系統(tǒng)的操作執(zhí)行成功。
在Skytools工具集中,有個子集,叫做pgq,可使用python語言實現(xiàn),調用搜索引擎系統(tǒng)(Elasticsearch)的相關api,將實時增量數(shù)據(jù)同步到消息系統(tǒng)中。并且通過api調用成功后進行標記,api調用失敗以后不斷進行重試,來保證數(shù)據(jù)不會漏傳輸也不會重復傳輸,每條數(shù)據(jù)都被傳輸一次,而且僅僅被傳輸一次。
在Skytools工具集中,有個子集,叫做pgq,可使用python語言實現(xiàn),調用nosql數(shù)據(jù)庫系統(tǒng)(Mongodb)的相關api,將實時增量數(shù)據(jù)同步到消息系統(tǒng)中。并且通過api調用成功后進行標記,api調用失敗以后不斷進行重試,來保證數(shù)據(jù)不會漏傳輸也不會重復傳輸,每條數(shù)據(jù)都被傳輸一次,而且僅僅被傳輸一次。
在Skytools工具集中,有個子集,叫做pgq,使用python語言實現(xiàn),調用緩存系統(tǒng)(Redis)的相關api,將實時增量數(shù)據(jù)同步到消息系統(tǒng)中。并且通過api調用成功后進行標記,api調用失敗以后不斷進行重試,來保證數(shù)據(jù)不會漏傳輸也不會重復傳輸,每條數(shù)據(jù)都被傳輸一次,而且僅僅被傳輸一次。
在Skytools工具集中,有個子集,叫做pgq,使用python語言實現(xiàn),調用大數(shù)據(jù)計算引擎系統(tǒng)(Impala)的相關api,將實時增量數(shù)據(jù)同步到消息系統(tǒng)中。并且通過api調用成功后進行標記,api調用失敗以后不斷進行重試,來保證數(shù)據(jù)不會漏傳輸也不會重復傳輸,每條數(shù)據(jù)都被傳輸一次,而且僅僅被傳輸一次。
需要說明的是,在步驟S101之前,通過自定義的配置文件,可以配置哪些數(shù)據(jù)需要進行同步,哪幾個異構系統(tǒng)需要進行同步。靈活配置,便于修改,便于運維。
通過上述實施例,提供了PostgreSQL數(shù)據(jù)庫與異構系統(tǒng)之間的實時增量同步數(shù)據(jù)的整個技術設計和技術實現(xiàn)方案,使得PostgreSQL數(shù)據(jù)庫與異構系統(tǒng)之間的可以實現(xiàn)實時增量同步數(shù)據(jù)。
通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到根據(jù)上述實施例的方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現(xiàn)有技術做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(如ROM/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本發(fā)明各個實施例所述的方法。
實施例2
本發(fā)明實施例中還提供了一種數(shù)據(jù)的同步裝置。該裝置用于實現(xiàn)上述實施例及優(yōu)選實施方式,已經(jīng)進行過說明的不再贅述。如以下所使用的,術語“模塊”可以實現(xiàn)預定功能的軟件和/或硬件的組合。盡管以下實施例所描述的裝置較佳地以軟件來實現(xiàn),但是硬件,或者軟件和硬件的組合的實現(xiàn)也是可能并被構想的。
圖2是根據(jù)本發(fā)明實施例的數(shù)據(jù)的同步裝置的示意圖。如圖2所示,該裝置可以包括:獲取單元21和同步單元22。
獲取單元21,用于在目標數(shù)據(jù)庫中存在增量數(shù)據(jù)的情況下,獲取增量數(shù)據(jù)和目標數(shù)據(jù)庫的配置信息;
同步單元22,用于將增量數(shù)據(jù)同步至配置信息所指示的一個或多個系統(tǒng),其中,一個或多個系統(tǒng)為配置信息中與增量數(shù)據(jù)的數(shù)據(jù)類型對應的異構系統(tǒng)。
通過上述實施例,獲取單元在目標數(shù)據(jù)庫中存在增量數(shù)據(jù)的情況下,獲取增量數(shù)據(jù)和目標數(shù)據(jù)庫的配置信息;同步單元將增量數(shù)據(jù)同步至配置信息所指示的一個或多個系統(tǒng),其中,一個或多個系統(tǒng)為配置信息中與增量數(shù)據(jù)的數(shù)據(jù)類型對應的異構系統(tǒng),從而解決了相關技術中數(shù)據(jù)庫與異構系統(tǒng)之間不能進行實時增量數(shù)據(jù)同步的技術問題,實現(xiàn)了在數(shù)據(jù)庫與異構系統(tǒng)之間進行實時增量數(shù)據(jù)同步的技術效果。
可選地,一個或多個系統(tǒng)包括以下至少之一:搜索引擎系統(tǒng)Elasticsearch、數(shù)據(jù)庫系統(tǒng)Mongodb、緩存系統(tǒng)Redis以及大數(shù)據(jù)計算引擎系統(tǒng)Impala。上述的目標數(shù)據(jù)庫包括PostgreSQL類型的數(shù)據(jù)庫。
可選地,獲取單元還用于利用Skytools工具集中的第二應用程序編程接口讀取目標數(shù)據(jù)庫中的增量數(shù)據(jù),其中,第二應用程序編程接口為Skytools工具集的pgq子集中的應用程序編程接口。
在上述實施例中,同步單元還用于將增量數(shù)據(jù)發(fā)送至消息系統(tǒng),由消息系統(tǒng)將增量數(shù)據(jù)同步至一個或多個系統(tǒng),其中,消息系統(tǒng)為Kafka消息系統(tǒng)。
可選地,同步單元包括:發(fā)送模塊,用于利用Skytools工具集中的第一應用程序編程接口發(fā)送增量數(shù)據(jù)至消息系統(tǒng),其中,第一應用程序編程接口為Skytools工具集的pgq子集中的應用程序編程接口。
上述的發(fā)送模塊還用于在利用Skytools工具集中的第一應用程序編程接口發(fā)送增量數(shù)據(jù)至消息系統(tǒng)之后,接收第一應用程序編程接口的回應信息,其中,在接收到回應信息的情況下,確認將增量數(shù)據(jù)發(fā)送至消息系統(tǒng)的操作執(zhí)行成功。
需要說明的是,上述裝置還包括配置單元,用于通過自定義的配置文件配置需要同步的數(shù)據(jù)和/或需要同步的異構系統(tǒng),可以配置哪些數(shù)據(jù)需要進行同步,哪幾個異構系統(tǒng)需要進行同步。靈活配置,便于修改,便于運維。
需要說明的是,上述各個模塊是可以通過軟件或硬件來實現(xiàn)的,對于后者,可以通過以下方式實現(xiàn),但不限于此:上述模塊均位于同一處理器中;或者,上述各個模塊以任意組合的形式分別位于不同的處理器中。
實施例3
本發(fā)明的實施例還提供了一種存儲介質??蛇x地,在本實施例中,上述存儲介質可以被設置為存儲用于執(zhí)行以下步驟的程序代碼:
S1,在目標數(shù)據(jù)庫中存在增量數(shù)據(jù)的情況下,獲取增量數(shù)據(jù)和目標數(shù)據(jù)庫的配置信息;
S2,將增量數(shù)據(jù)同步至配置信息所指示的一個或多個系統(tǒng),一個或多個系統(tǒng)為配置信息中與增量數(shù)據(jù)的數(shù)據(jù)類型對應的異構系統(tǒng)。
可選地,在本實施例中,上述存儲介質可以包括但不限于:U盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質。
可選地,在本實施例中,處理器根據(jù)存儲介質中已存儲的程序代碼執(zhí)行:在目標數(shù)據(jù)庫中存在增量數(shù)據(jù)的情況下,獲取增量數(shù)據(jù)和目標數(shù)據(jù)庫的配置信息;將增量數(shù)據(jù)同步至配置信息所指示的一個或多個系統(tǒng),一個或多個系統(tǒng)為配置信息中與增量數(shù)據(jù)的數(shù)據(jù)類型對應的異構系統(tǒng)。
可選地,本實施例中的具體示例可以參考上述實施例及可選實施方式中所描述的示例,本實施例在此不再贅述。
顯然,本領域的技術人員應該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計算裝置來實現(xiàn),它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網(wǎng)絡上,可選地,它們可以用計算裝置可執(zhí)行的程序代碼來實現(xiàn),從而,可以將它們存儲在存儲裝置中由計算裝置來執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結合。
以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領域的技術人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。