主從數(shù)據(jù)庫的同步方法及裝置的制造方法
【專利摘要】本發(fā)明公開了一種主從數(shù)據(jù)庫的同步方法及裝置。其中,所述方法包括:接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量,所述第一文件偏移量是主數(shù)據(jù)庫數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量;讀取主數(shù)據(jù)庫的本地日志文件,根據(jù)所述第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫?;谏鲜鰧?shí)施方案,本發(fā)明無需在主數(shù)據(jù)庫針對(duì)每個(gè)從數(shù)據(jù)庫分別存儲(chǔ)日志文件,減少了對(duì)分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)的空間占用,避免浪費(fèi)存儲(chǔ)空間,且進(jìn)一步提升了主數(shù)據(jù)庫和從數(shù)據(jù)庫中數(shù)據(jù)同步一致性。
【專利說明】
主從數(shù)據(jù)庫的同步方法及裝置
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,具體涉及一種主從數(shù)據(jù)庫的同步方法及裝置。
【背景技術(shù)】
[0002]現(xiàn)有技術(shù)中,分布式存儲(chǔ)系統(tǒng)通常包括一個(gè)主數(shù)據(jù)庫和若干個(gè)從數(shù)據(jù)庫,為了保持主數(shù)據(jù)庫與從數(shù)據(jù)庫之間的數(shù)據(jù)同步,現(xiàn)有技術(shù)一般采用的方法是:分別針對(duì)每個(gè)從數(shù)據(jù)庫建立并存儲(chǔ)一個(gè)對(duì)應(yīng)的日志文件,當(dāng)在主數(shù)據(jù)寫入數(shù)據(jù)后,會(huì)相應(yīng)的在每個(gè)日志文件記錄相應(yīng)的數(shù)據(jù)寫操作,以用于對(duì)從數(shù)據(jù)庫進(jìn)行數(shù)據(jù)同步。這種方式不僅浪費(fèi)分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)的空間,而且,在將主數(shù)據(jù)庫的數(shù)據(jù)同步至從數(shù)據(jù)庫的過程中,將會(huì)阻塞數(shù)據(jù)寫入主數(shù)據(jù)庫,也就是說,在主數(shù)據(jù)庫的數(shù)據(jù)同步至從數(shù)據(jù)庫后,才可以將數(shù)據(jù)寫入到主數(shù)據(jù)庫中,降低了數(shù)據(jù)寫入效率和同步效率。
【發(fā)明內(nèi)容】
[0003]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的主從數(shù)據(jù)庫的同步方法和相應(yīng)的主從數(shù)據(jù)庫的同步裝置。
[0004]根據(jù)本發(fā)明的一個(gè)方面,提供了一種主從數(shù)據(jù)庫的同步方法,其包括:
[0005]當(dāng)接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量,第一文件偏移量是主數(shù)據(jù)庫數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量;
[0006]讀取主數(shù)據(jù)庫的本地日志文件,根據(jù)第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0007]根據(jù)本發(fā)明的另一方面,提供了一種主從數(shù)據(jù)庫的同步裝置,其包括:
[0008]寫數(shù)據(jù)處理模塊,適于當(dāng)接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量,第一文件偏移量是主數(shù)據(jù)庫數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量;
[0009]同步模塊,適于讀取主數(shù)據(jù)庫的本地日志文件,根據(jù)第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0010]根據(jù)本發(fā)明提供的技術(shù)方案,當(dāng)接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量,第一文件偏移量是主數(shù)據(jù)庫數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量;讀取主數(shù)據(jù)庫的本地日志文件,根據(jù)第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫?;谏鲜鰧?shí)施方案,本發(fā)明無需在主數(shù)據(jù)庫針對(duì)每個(gè)從數(shù)據(jù)庫分別存儲(chǔ)日志文件,減少了對(duì)分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)的空間占用,并且數(shù)據(jù)寫入主數(shù)據(jù)庫與數(shù)據(jù)同步至從數(shù)據(jù)庫可以同時(shí)執(zhí)行,并不會(huì)因?yàn)閳?zhí)行數(shù)據(jù)同步而阻塞數(shù)據(jù)寫入主數(shù)據(jù)庫,從而提高了數(shù)據(jù)寫入效率和同步效率,避免浪費(fèi)存儲(chǔ)空間,且進(jìn)一步提升了主數(shù)據(jù)庫和從數(shù)據(jù)庫中數(shù)據(jù)同步一致性。
[0011]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的【具體實(shí)施方式】。
【附圖說明】
[0012]通過閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
[0013]圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的主從數(shù)據(jù)庫的同步方法的流程示意圖;
[0014]圖2示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的主從數(shù)據(jù)庫的同步方法的流程示意圖;
[0015]圖3示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的主從數(shù)據(jù)庫的同步方法的流程示意圖;
[0016]圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的主從數(shù)據(jù)庫的同步裝置的結(jié)構(gòu)框圖;
[0017]圖5示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的主從數(shù)據(jù)庫的同步裝置的結(jié)構(gòu)框圖;
[0018]圖6示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的主從數(shù)據(jù)庫的同步裝置的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0019]下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0020]分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)就是將數(shù)據(jù)分散存儲(chǔ)在多臺(tái)獨(dú)立的設(shè)備上,也就是說,針對(duì)一份數(shù)據(jù),存儲(chǔ)至N個(gè)數(shù)據(jù)庫,一般是存儲(chǔ)至一個(gè)主數(shù)據(jù)庫和多個(gè)從數(shù)據(jù)庫,且數(shù)據(jù)是同步存儲(chǔ)至主數(shù)據(jù)庫和多個(gè)從數(shù)據(jù)庫,以保證當(dāng)主數(shù)據(jù)庫中的數(shù)據(jù)出現(xiàn)問題時(shí),并不會(huì)影響相應(yīng)的服務(wù)。
[0021]圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的主從數(shù)據(jù)庫的同步方法的流程示意圖。如圖1所示,該方法包括以下步驟:
[0022]步驟S100,當(dāng)接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量。
[0023]其中,第一文件偏移量是主數(shù)據(jù)庫中數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量,根據(jù)該第一文件偏移量可以很方便地在本地日志文件查找到數(shù)據(jù)寫操作記錄,獲得寫入主數(shù)據(jù)庫中的數(shù)據(jù)。
[0024]本地日志文件用于記錄寫入到主數(shù)據(jù)庫的數(shù)據(jù)寫操作記錄,這里的本地日志文件可以是二進(jìn)制日志文件,也稱為Binlog文件,是一種邏輯日志,用于記錄對(duì)數(shù)據(jù)所執(zhí)行的數(shù)據(jù)寫操作,并以二進(jìn)制的形式保存在磁盤中。Binlog文件按照對(duì)數(shù)據(jù)所執(zhí)行的數(shù)據(jù)寫操作的順序進(jìn)行存儲(chǔ),而且記錄次數(shù)與所執(zhí)行操作的次數(shù)相對(duì)應(yīng),即,每對(duì)數(shù)據(jù)執(zhí)行一次數(shù)據(jù)寫操作,就在Binlog文件中記錄一次。
[0025]具體地,當(dāng)計(jì)算機(jī)用戶需要將數(shù)據(jù)寫入到分布式數(shù)據(jù)存儲(chǔ)統(tǒng)的主數(shù)據(jù)庫時(shí),計(jì)算機(jī)用戶向該分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)發(fā)送數(shù)據(jù)寫入請(qǐng)求,分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)在接收到數(shù)據(jù)寫入請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量。
[0026]在將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中之后,在本發(fā)明的實(shí)施例中,還需要向數(shù)據(jù)寫請(qǐng)求的發(fā)起者返回?cái)?shù)據(jù)寫響應(yīng)。
[0027]在更新第一文件偏移量之后,若需要將主數(shù)據(jù)庫中的數(shù)據(jù)同步至從數(shù)據(jù)庫,可以讀取主數(shù)據(jù)庫的本地日志文件,根據(jù)第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫,具體地,可以通過如下步驟實(shí)現(xiàn)將新增的數(shù)據(jù)同步至從數(shù)據(jù)庫:
[0028]步驟SlOl,讀取主數(shù)據(jù)庫的本地日志文件,比較第一文件偏移量和第二文件偏移量是否一致,若不一致,則執(zhí)行步驟S102;若一致,則返回至步驟S100。
[0029]其中,第二文件偏移量是已被同步至從數(shù)據(jù)庫的數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量,也就是說,根據(jù)該第二文件偏移量可以確定主數(shù)據(jù)庫中哪些數(shù)據(jù)已被同步至從數(shù)據(jù)庫。
[0030]在本發(fā)明實(shí)施例中,讀取主數(shù)據(jù)庫的本地日志文件,可以得到當(dāng)前本地日志文件的第一文件偏移量,通過比較第一文件偏移量和第二文件按偏移量是否一致,來判斷主數(shù)據(jù)庫中的數(shù)據(jù)在前次同步至從數(shù)據(jù)庫后是否發(fā)生更新,是否需要進(jìn)行主數(shù)據(jù)庫至從數(shù)據(jù)庫的同步。
[0031]步驟S102,將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0032]在根據(jù)步驟SlOl判斷出第一文件偏移量和第二文件偏移量不一致的情況下,可以確定在將第二文件偏移量對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫后,主數(shù)據(jù)庫中又新寫入了其他數(shù)據(jù),并將這些數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,更新第一文件偏移量,而這些數(shù)據(jù)并未同步至從數(shù)據(jù)庫,需要將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0033]在將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫后,需要對(duì)已同步至從數(shù)據(jù)庫的數(shù)據(jù)對(duì)應(yīng)于本地日志文件的第二文件偏移量進(jìn)行更新。
[0034]步驟S103,更新第二文件偏移量。
[0035]這里是將第二文件偏移量更新為步驟SlOO中的第一文件偏移量。
[0036]步驟S104,在從數(shù)據(jù)庫同步數(shù)據(jù)成功后,更新第三文件偏移量。
[0037]其中,第三文件偏移量是從數(shù)據(jù)庫中數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量,根據(jù)該第三文件偏移量可以確定本地日志文件中記錄的哪些數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)已被同步至從數(shù)據(jù)庫,從而確定需要將哪些新增的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0038]在主數(shù)據(jù)庫的數(shù)據(jù)已經(jīng)同步至從數(shù)據(jù)庫后,將第三文件偏移量更新為步驟S103中的第二文件偏移量。
[0039]在數(shù)據(jù)同步過程中,可能會(huì)出現(xiàn)連接異?;蜻B接超時(shí)的情況,在上述實(shí)施例的基礎(chǔ)上,本發(fā)明還能夠解決因連接異常或連接超時(shí),導(dǎo)致的數(shù)據(jù)并未被及時(shí)同步至從數(shù)據(jù)庫的缺陷,為了克服上述缺陷,具體可以采用如下方法步驟:
[0040]步驟一:若從數(shù)據(jù)庫發(fā)現(xiàn)連接異?;蛘哌B接超時(shí),則重新發(fā)起連接。
[0041]若主數(shù)據(jù)庫與從數(shù)據(jù)庫連接異常或者連接超時(shí),從數(shù)據(jù)庫將向主數(shù)據(jù)庫重新發(fā)起連接,以在連接成功后,能夠?qū)⒅鲾?shù)據(jù)庫中的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0042]步驟二:在連接成功后,比較第二文件偏移量和第三文件偏移量是否一致,若不一致,則依據(jù)第三文件偏移量更新第二文件偏移量。
[0043]具體地,比較第二文件偏移量和第三文件偏移量是否一致,主要是為了確定在連接異?;蜻B接超時(shí)前,主數(shù)據(jù)庫中的數(shù)據(jù)是否被同步至從數(shù)據(jù)庫,在比較出第二文件偏移量和第三文件偏移量不一致的情況下,可以確定在第三文件偏移量對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫后,本地日志文件中從第三文件偏移量對(duì)應(yīng)的數(shù)據(jù)到第二文件偏移量對(duì)應(yīng)的數(shù)據(jù)并未被同步至從數(shù)據(jù)庫,需要將主數(shù)據(jù)庫中從第三文件偏移量對(duì)應(yīng)的數(shù)據(jù)開始繼續(xù)將數(shù)據(jù)同步至從數(shù)據(jù)庫。具體地,可以依據(jù)第三文件偏移量更新所述第二文件偏移量,例如,將第二文件偏移量更新為第三文件偏移量。
[0044]根據(jù)本發(fā)明上述實(shí)施例提供的方法,接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量,讀取主數(shù)據(jù)庫的本地日志文件,比較第一文件偏移量和第二文件偏移量是否一致,在第一文件偏移量和第二文件偏移量不一致的情況下,將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫,更新第二文件偏移量,在從數(shù)據(jù)庫同步數(shù)據(jù)成功后,更新第三文件偏移量?;谏鲜鰧?shí)施方案,本發(fā)明無需在主數(shù)據(jù)庫針對(duì)每個(gè)從數(shù)據(jù)庫分別存儲(chǔ)日志文件,減少了對(duì)分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)的空間占用,并且數(shù)據(jù)寫入主數(shù)據(jù)庫與數(shù)據(jù)同步至從數(shù)據(jù)庫可以同時(shí)執(zhí)行,并不會(huì)因?yàn)閳?zhí)行數(shù)據(jù)同步而阻塞數(shù)據(jù)寫入主數(shù)據(jù)庫,從而提高了數(shù)據(jù)寫入效率,避免浪費(fèi)存儲(chǔ)空間,且進(jìn)一步提升了主數(shù)據(jù)庫和從數(shù)據(jù)庫中數(shù)據(jù)同步一致性。
[0045]圖2示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的主從數(shù)據(jù)庫的同步方法的流程示意圖。本實(shí)施例將以增加新的從數(shù)據(jù)庫的場(chǎng)景,詳細(xì)介紹主從數(shù)據(jù)庫的同步方法,如圖2所示,該方法包括以下步驟:
[0046]步驟S200,在接收到添加新的從數(shù)據(jù)庫的請(qǐng)求后,備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件,并記錄備份時(shí)的第一文件偏移量作為針對(duì)該新的從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量。
[0047]其中,第一文件偏移量是主數(shù)據(jù)庫中數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量,根據(jù)該第一文件偏移量可以很方便地在本地日志文件查找到數(shù)據(jù)寫操作記錄;本地日志文件用于記錄寫入到主數(shù)據(jù)庫的數(shù)據(jù)寫操作記錄。
[0048]第二文件偏移量是已被同步至從數(shù)據(jù)庫的數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量,也就是說,根據(jù)該第二文件偏移量可以確定主數(shù)據(jù)庫中哪些數(shù)據(jù)已被同步至從數(shù)據(jù)庫。
[0049]第三文件偏移量是從數(shù)據(jù)庫中數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量,根據(jù)該第三文件偏移量可以確定本地日志文件中記錄的哪些數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)已被同步至從數(shù)據(jù)庫,從而確定需要將哪些新增的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0050]具體地,在接收到添加新的從數(shù)據(jù)庫請(qǐng)求后,需要將主數(shù)據(jù)庫中已存儲(chǔ)的數(shù)據(jù)同步給從數(shù)據(jù)庫,當(dāng)主數(shù)據(jù)庫存儲(chǔ)的數(shù)據(jù)量很大時(shí),利用本地日志文件并不能快速、準(zhǔn)確地將主數(shù)據(jù)庫中已存儲(chǔ)的數(shù)據(jù)同步給從數(shù)據(jù)庫,在本發(fā)明實(shí)施例中,通過備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件,使新的從數(shù)據(jù)庫加載該快照文件來實(shí)現(xiàn)同步主數(shù)據(jù)庫中的數(shù)據(jù)的目的。
[0051]在備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件后,還需要記錄備份時(shí)的第一文件偏移量,并將該第一文件偏移量作為針對(duì)該新的從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量,以在從數(shù)據(jù)庫加載快照文件結(jié)束后,可以根據(jù)該第二文件偏移量繼續(xù)同步主數(shù)據(jù)庫新增的數(shù)據(jù),或者若連接異常或者連接超時(shí),則可以根據(jù)新的從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量繼續(xù)同步主數(shù)據(jù)庫中的數(shù)據(jù)。例如,在備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件時(shí),所記錄的第一文件偏移量為6-47,則將6-47作為針對(duì)該新的從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量,即第二文件偏移量和第三文件偏移量為6-47。
[0052]步驟S201,將快照文件發(fā)送給新的從數(shù)據(jù)庫,使新的從數(shù)據(jù)庫加載主數(shù)據(jù)庫的所有數(shù)據(jù),以使新的從數(shù)據(jù)庫正常工作。
[0053]具體地,將步驟S200中備份的快照文件發(fā)給新的從數(shù)據(jù)庫,新的從數(shù)據(jù)庫通過加載快照文件,實(shí)現(xiàn)將主數(shù)據(jù)庫的所有數(shù)據(jù)加載到新的從數(shù)據(jù)庫,在將主數(shù)據(jù)庫的所有數(shù)據(jù)加載到新的從數(shù)據(jù)庫后,該新的從數(shù)據(jù)庫將能夠正常工作。
[0054]步驟S202,在備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件過程中,當(dāng)接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量。
[0055]具體地,當(dāng)計(jì)算機(jī)用戶需要將數(shù)據(jù)寫入到分布式數(shù)據(jù)存儲(chǔ)統(tǒng)的主數(shù)據(jù)庫時(shí),計(jì)算機(jī)用戶向該分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)發(fā)送數(shù)據(jù)寫入請(qǐng)求,分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)在接收到數(shù)據(jù)寫入請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量,例如更新后的第一文件偏移量為7-30。
[0056]在將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中之后,在本發(fā)明的實(shí)施例中,還需要向數(shù)據(jù)寫請(qǐng)求的發(fā)起者返回?cái)?shù)據(jù)寫響應(yīng)。
[0057]步驟S203,讀取主數(shù)據(jù)庫的本地日志文件,比較第一文件偏移量和第二文件偏移量是否一致,若不一致,則執(zhí)行步驟S204;若一致,則返回至步驟S202。
[0058]在本發(fā)明實(shí)施例中,讀取主數(shù)據(jù)庫的本地日志文件,可以得到當(dāng)前本地日志文件的第一文件偏移量,通過比較第一文件偏移量和第二文件按偏移量是否一致,來判斷主數(shù)據(jù)庫中的數(shù)據(jù)在獲取以及加載主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件的過程中是否發(fā)生更新,是否需要將主數(shù)據(jù)庫中的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0059]步驟S204,將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至該新的從數(shù)據(jù)庫。
[0060]在根據(jù)步驟S203判斷出第一文件偏移量和第二文件偏移量不一致的情況下,可以確定在將第二文件偏移量對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫后,主數(shù)據(jù)庫中又新寫入了其他數(shù)據(jù),并將這些數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,更新第一文件偏移量,而這些數(shù)據(jù)并未同步至從數(shù)據(jù)庫,需要將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫,即將第二文件偏移量6-47至第一文件偏移量7-30對(duì)應(yīng)的主數(shù)據(jù)庫的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0061]在將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫后,需要對(duì)已同步至從數(shù)據(jù)庫的數(shù)據(jù)對(duì)應(yīng)于本地日志文件的第二文件偏移量進(jìn)行更新。
[0062]步驟S205,更新第二文件偏移量。
[0063]這里是將第二文件偏移量更新為步驟S202中的第一文件偏移量。
[0064]步驟S206,在從數(shù)據(jù)庫同步數(shù)據(jù)成功后,更新第三文件偏移量。
[0065]在主數(shù)據(jù)庫的數(shù)據(jù)已經(jīng)同步至從數(shù)據(jù)庫后,將第三文件偏移量更新為步驟S205中的第二文件偏移量。
[0066]根據(jù)本發(fā)明上述實(shí)施例提供的方法,在接收到添加新的從數(shù)據(jù)庫的請(qǐng)求后,備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件,并記錄備份時(shí)的第一文件偏移量作為針對(duì)該新的從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量,將快照文件發(fā)送給新的從數(shù)據(jù)庫,使新的從數(shù)據(jù)庫加載主數(shù)據(jù)庫的所有數(shù)據(jù),以使新的從數(shù)據(jù)庫正常工作,新的從數(shù)據(jù)庫正常工作后,將與其他從數(shù)據(jù)庫同步方法相同。基于上述實(shí)施方案,本發(fā)明無需在主數(shù)據(jù)庫針對(duì)每個(gè)從數(shù)據(jù)庫分別存儲(chǔ)日志文件,減少了對(duì)分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)的空間占用,并且數(shù)據(jù)寫入主數(shù)據(jù)庫與數(shù)據(jù)同步至從數(shù)據(jù)庫可以同時(shí)執(zhí)行,當(dāng)增加新的從數(shù)據(jù)庫后,可以使從數(shù)據(jù)庫快速地加載到主數(shù)據(jù)庫的數(shù)據(jù),且不會(huì)阻塞數(shù)據(jù)寫入主數(shù)據(jù)庫,從而提高了數(shù)據(jù)寫入效率,避免浪費(fèi)存儲(chǔ)空間,且進(jìn)一步提升了主數(shù)據(jù)庫和從數(shù)據(jù)庫中數(shù)據(jù)同步一致性。
[0067]上文中的Binlog文件是一具有固定大小的文件,一般可以設(shè)定Binlog文件的大小為20M,當(dāng)一個(gè)Binlog文件遞增到20M后,即新建另一個(gè)Binlog文件來記錄對(duì)數(shù)據(jù)所執(zhí)行的數(shù)據(jù)寫操作,也就是說,主數(shù)據(jù)庫的本地日志文件有多個(gè),而且可以為每個(gè)本地日志文件設(shè)置文件編號(hào),即:每個(gè)本地日志文件具有唯一的文件編號(hào);這樣本地日志文件的文件偏移量包括:文件編號(hào)和文件內(nèi)偏移量。下面實(shí)施例將以定期刪除本地日志文件為應(yīng)用場(chǎng)景介紹主從數(shù)據(jù)庫的同步方法,也就是說,在本發(fā)明實(shí)施例中,當(dāng)主數(shù)據(jù)庫中的數(shù)據(jù)被實(shí)時(shí)同步至從數(shù)據(jù)庫后,可以每隔預(yù)設(shè)時(shí)間刪除預(yù)設(shè)數(shù)量的本地日志文件,以避免占用磁盤空間,本領(lǐng)域技術(shù)人員可以根據(jù)實(shí)際需要設(shè)定預(yù)設(shè)時(shí)間和預(yù)設(shè)數(shù)量,這里不做具體限定。
[0068]圖3示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的主從數(shù)據(jù)庫的同步方法的流程示意圖。如圖3所示,該方法包括以下步驟:
[0069]步驟S300,當(dāng)接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量。
[0070]其中,第一文件偏移量是主數(shù)據(jù)庫中數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量,根據(jù)該第一文件偏移量可以很方便地在本地日志文件查找到數(shù)據(jù)寫操作記錄;本地日志文件用于記錄寫入到主數(shù)據(jù)庫的數(shù)據(jù)寫操作記錄。
[0071]具體地,當(dāng)計(jì)算機(jī)用戶需要將數(shù)據(jù)寫入到分布式數(shù)據(jù)存儲(chǔ)統(tǒng)的主數(shù)據(jù)庫時(shí),計(jì)算機(jī)用戶向該分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)發(fā)送數(shù)據(jù)寫入請(qǐng)求,分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)在接收到數(shù)據(jù)寫入請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量。
[0072]在將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中之后,在本發(fā)明的實(shí)施例中,還需要向數(shù)據(jù)寫請(qǐng)求的發(fā)起者返回?cái)?shù)據(jù)寫響應(yīng)。
[0073]在更新第一文件偏移量之后,若需要將主數(shù)據(jù)庫中的數(shù)據(jù)同步至從數(shù)據(jù)庫,可以讀取主數(shù)據(jù)庫的本地日志文件,根據(jù)第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫,具體地,可以通過如下步驟實(shí)現(xiàn)將新增的數(shù)據(jù)同步至從數(shù)據(jù)庫:
[0074]步驟S301,讀取主數(shù)據(jù)庫的本地日志文件,比較第一文件偏移量和第二文件偏移量是否一致,若不一致,則執(zhí)行步驟S302;若一致,則返回至步驟S300。
[0075]其中,第二文件偏移量是已被同步至從數(shù)據(jù)庫的數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量,也就是說,根據(jù)該第二文件偏移量可以確定主數(shù)據(jù)庫中哪些數(shù)據(jù)已被同步至從數(shù)據(jù)庫。
[0076]在本發(fā)明實(shí)施例中,讀取主數(shù)據(jù)庫的本地日志文件,可以得到當(dāng)前本地日志文件的第一文件偏移量,通過比較第一文件偏移量和第二文件按偏移量是否一致,來判斷主數(shù)據(jù)庫中的數(shù)據(jù)在前次同步至從數(shù)據(jù)庫后是否發(fā)生更新,是否需要進(jìn)行主數(shù)據(jù)庫至從數(shù)據(jù)庫的同步。
[0077]步驟S302,將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0078]在根據(jù)步驟S301判斷出第一文件偏移量和第二文件偏移量不一致的情況下,可以確定在將第二文件偏移量對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫后,主數(shù)據(jù)庫中又新寫入了其他數(shù)據(jù),并將這些數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,更新第一文件偏移量,而這些數(shù)據(jù)并未同步至從數(shù)據(jù)庫,需要將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0079]在將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫后,需要對(duì)已同步至從數(shù)據(jù)庫的數(shù)據(jù)對(duì)應(yīng)于本地日志文件的第二文件偏移量進(jìn)行更新。
[0080]步驟S303,更新第二文件偏移量。
[0081 ]這里是將第二文件偏移量更新為步驟S300中的第一文件偏移量。
[0082]步驟S304,在從數(shù)據(jù)庫同步數(shù)據(jù)成功后,更新第三文件偏移量。
[0083]其中,第三文件偏移量是從數(shù)據(jù)庫中數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量,根據(jù)該第三文件偏移量可以確定本地日志文件中記錄的哪些數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)已被同步至從數(shù)據(jù)庫,從而確定需要將哪些新增的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0084]步驟S305,若從數(shù)據(jù)庫發(fā)現(xiàn)連接異?;蛘哌B接超時(shí),重新發(fā)起連接。
[0085]步驟S306,在連接成功后,比較第二文件偏移量和第三文件偏移量是否一致,若不一致,則執(zhí)行步驟S307 ;若一致,則執(zhí)行步驟S308。
[0086]具體地,比較第二文件偏移量和第三文件偏移量是否一致,主要是為了確定在連接異?;蜻B接超時(shí)前,主數(shù)據(jù)庫中的數(shù)據(jù)是否被成功同步至從數(shù)據(jù)庫,在比較出第二文件偏移量和第三文件偏移量不一致的情況下,可以確定在第三文件偏移量對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫后,對(duì)于本地日志文件中,從第三文件偏移量對(duì)應(yīng)的數(shù)據(jù)到第二文件偏移量對(duì)應(yīng)的數(shù)據(jù)并未被同步至從數(shù)據(jù)庫,需要將主數(shù)據(jù)庫中從第三文件偏移量對(duì)應(yīng)的數(shù)據(jù)開始重新將這部分?jǐn)?shù)據(jù)同步至從數(shù)據(jù)庫;在第二文件偏移量和第三文件偏移量一致的情況下,還需要確定第二文件偏移量對(duì)應(yīng)的本地日志文件是否存在。
[0087]步驟S307,依據(jù)第三文件偏移量更新第二文件偏移量。
[0088]具體地,在第三文件偏移量與第二文件偏移量不一致的情況下,將第二文件偏移量更新為第三文件偏移量,以從第三文件偏移量處開始將主數(shù)據(jù)庫的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0089]步驟S308,查找第二文件偏移量對(duì)應(yīng)的本地日志文件是否存在,若存在,則執(zhí)行步驟S309,若不存在,則執(zhí)行步驟S310。
[0090]在本發(fā)明實(shí)施例中介紹了,每隔預(yù)設(shè)時(shí)間刪除預(yù)設(shè)數(shù)量的本地日志文件,因此,在依據(jù)第三文件偏移量更新第二文件偏移量之后,需要查找第二文件偏移量對(duì)應(yīng)的日志文件是否存在,根據(jù)第二文件偏移量對(duì)應(yīng)的本地日志文件是否存在可以確定對(duì)應(yīng)的本地日志文件是否被刪除。
[0091 ]步驟S309,通過比較第一文件偏移量和第二文件偏移量是否一致進(jìn)行同步續(xù)傳。
[0092]在第二文件偏移量對(duì)應(yīng)的本地日志文件存在的情況下,通過比較第一文件偏移量和第二文件偏移量是否一致進(jìn)行同步續(xù)傳,若第一文件偏移量和第二文件偏移量一致,則說明無需續(xù)傳,若第一文件偏移量和第二文件偏移量不一致,則說明需要續(xù)傳,將根據(jù)第二文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至該從數(shù)據(jù)庫。
[0093]步驟S310,備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件,記錄備份時(shí)的第一文件偏移量為針對(duì)該從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量。
[0094]在第二文件偏移量對(duì)應(yīng)的本地日志文件不存在的情況下,說明相應(yīng)的本地日志文件已被刪除,無法再根據(jù)第二文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至該從數(shù)據(jù)庫,就需要備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件,記錄備份時(shí)的第一文件偏移量為針對(duì)該從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量。
[0095]步驟S311,將快照文件發(fā)送給從數(shù)據(jù)庫,使從數(shù)據(jù)庫加載主數(shù)據(jù)庫的所有數(shù)據(jù)。
[0096]具體地,將步驟S310中備份的快照文件發(fā)給新的從數(shù)據(jù)庫,新的從數(shù)據(jù)庫通過加載快照文件,實(shí)現(xiàn)將主數(shù)據(jù)庫的所有數(shù)據(jù)加載到新的從數(shù)據(jù)庫,在將主數(shù)據(jù)庫的所有數(shù)據(jù)加載到新的從數(shù)據(jù)庫后,該新的從數(shù)據(jù)庫將能夠正常工作。
[0097]步驟S312,在從數(shù)據(jù)庫正常工作后,根據(jù)當(dāng)前的第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至該從數(shù)據(jù)庫。
[0098]具體地,在新的從數(shù)據(jù)庫加載完主數(shù)據(jù)庫的所有數(shù)據(jù)后,該新的從數(shù)據(jù)庫將能夠正常工作,在備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件的過程中,主數(shù)據(jù)庫可能還會(huì)寫入新的數(shù)據(jù),這里就需要根據(jù)當(dāng)前的第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至該新的從數(shù)據(jù)庫,實(shí)現(xiàn)從數(shù)據(jù)庫能夠?qū)崟r(shí)同步主數(shù)據(jù)庫中的數(shù)據(jù)。
[0099]下面將通過實(shí)例介紹在刪除本地日志文件情況,若發(fā)生連接異?;蛘哌B接超時(shí),主從數(shù)據(jù)庫的同步方法:
[0100]舉例說明,本地日志文件有5個(gè),分別編號(hào):1、2、3、4、5,在預(yù)設(shè)時(shí)間段刪除了編號(hào)為1、2、3、4的本地日志文件,若發(fā)生連接異常或者連接超時(shí),從數(shù)據(jù)庫重新發(fā)起連接,在連接成功后,發(fā)現(xiàn)從數(shù)據(jù)庫對(duì)應(yīng)于本地日志文件的文件偏移量為4-67,即第三文件偏移量為4-67,而已同步至從數(shù)據(jù)庫的數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量為5-30,即第二文件偏移量為5-30,比較得到第二文件偏移量和第三文件偏移量不一致,將依據(jù)第三文件偏移量更新第二文件偏移量,更新后的第二文件偏移量為4-67,并根據(jù)更新后的第二文件偏移量查找相應(yīng)的本地日志文件是否存在,也就是查找編號(hào)為4的本地日志文件是否存在,得到編號(hào)為4的本地日志文件并不存在的情況下,備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件,記錄備份時(shí)的第一文件偏移量為針對(duì)該從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量,將快照文件發(fā)送給從數(shù)據(jù)庫,使從數(shù)據(jù)庫加載主數(shù)據(jù)庫的所有數(shù)據(jù),在從數(shù)據(jù)庫正常工作后,根據(jù)當(dāng)前的第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至該從數(shù)據(jù)庫。
[0101 ]針對(duì)上述全部實(shí)施例,讀取主數(shù)據(jù)庫的本地日志文件,根據(jù)第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫的步驟由同步線程執(zhí)行,每個(gè)從數(shù)據(jù)庫具有專屬于自己的同步線程。如果新增一個(gè)從數(shù)據(jù)庫,就要新啟動(dòng)一個(gè)同步線程,完成該從數(shù)據(jù)庫的同步操作。
[0102]而且,本地日志文件被劃分為等大小的分塊,例如每個(gè)分塊的大小為50KB,在將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中時(shí),可以將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件的一個(gè)或多個(gè)分塊中。
[0103]為了能夠準(zhǔn)確查找到本地日志文件中數(shù)據(jù)寫操作,在記錄每條數(shù)據(jù)寫操作之前,在分塊中記錄數(shù)據(jù)寫操作的元信息,其中,數(shù)據(jù)寫操作的元信息包含:數(shù)據(jù)寫操作的占用字節(jié)數(shù)和用于表明當(dāng)前分塊包含全部或部分?jǐn)?shù)據(jù)寫操作的標(biāo)識(shí),例如Full標(biāo)記當(dāng)前分塊包含一條完整的數(shù)據(jù)寫操作,F(xiàn)irst標(biāo)記當(dāng)前分塊包含一條數(shù)據(jù)寫操作的開始部分,Middle標(biāo)記當(dāng)前分塊包含一條數(shù)據(jù)寫操作的中間部分,Last標(biāo)記當(dāng)前分塊包含一條數(shù)據(jù)寫操作的結(jié)束部分。[0?04] 例如,需要將三條數(shù)據(jù)寫操作set a=l、set b = 3、set c = 7記錄到主數(shù)據(jù)庫的本地日志文件中,其中,數(shù)據(jù)寫操作set a=l所占用字節(jié)數(shù)為20KB,數(shù)據(jù)寫操作set b = 3所占用字節(jié)數(shù)為40KB,數(shù)據(jù)寫操作set c = 7所占用字節(jié)數(shù)為110KB,本地日志文件每個(gè)分塊的大小為50KB:
[0105]在記錄數(shù)據(jù)寫操作seta = l之前,在分塊中記錄該數(shù)據(jù)寫操作的元信息,即在分塊I中記錄FulI標(biāo)識(shí),然后在分塊I中記錄數(shù)據(jù)寫操作set a = l ;
[0106]在記錄完數(shù)據(jù)寫操作seta=l后,該分塊的可用字節(jié)數(shù)小于30KB,并不能將數(shù)據(jù)寫操作set b = 3全部記錄于分塊I,因此,在記錄數(shù)據(jù)寫操作set b = 3之前,在分塊I中記錄該分塊僅包含部分?jǐn)?shù)據(jù)寫操作set b = 3的標(biāo)識(shí)First,并在分塊I中記錄數(shù)據(jù)寫操作set b=3的開始部分,在分塊2開始部分記錄該分塊僅包含部分?jǐn)?shù)據(jù)寫操作set b = 3的標(biāo)識(shí)Last,并在分塊2中記錄數(shù)據(jù)寫操作set b = 3的結(jié)束部分;
[0107]在記錄完數(shù)據(jù)寫操作setb = 3后,該分塊的可用字節(jié)數(shù)小于40KB,并不能將數(shù)據(jù)寫操作set c = 7全部記錄于分塊2,因此,在記錄數(shù)據(jù)寫操作set c = 7之前,在分塊2中記錄該分塊僅包含部分?jǐn)?shù)據(jù)寫操作set c = 7的標(biāo)識(shí)First,并在分塊2中記錄數(shù)據(jù)寫操作set c=7的開始部分,在分塊3開始部分記錄該分塊僅包含部分?jǐn)?shù)據(jù)寫操作set c = 7的標(biāo)識(shí)Middle,并在分塊2中記錄數(shù)據(jù)寫操作set C = 7的中間部分,在分塊4開始部分記錄該分塊僅包含部分?jǐn)?shù)據(jù)寫操作set c = 7的標(biāo)識(shí)Last,并在分塊4中記錄數(shù)據(jù)寫操作set b = 3的結(jié)束部分。
[0108]根據(jù)本發(fā)明上述實(shí)施例提供的方法,本發(fā)明無需在主數(shù)據(jù)庫針對(duì)每個(gè)從數(shù)據(jù)庫分別存儲(chǔ)日志文件,減少了對(duì)分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)的空間占用,并且數(shù)據(jù)寫入主數(shù)據(jù)庫與數(shù)據(jù)同步至從數(shù)據(jù)庫可以同時(shí)執(zhí)行,當(dāng)增加新的從數(shù)據(jù)庫后,可以使從數(shù)據(jù)庫快速地加載到主數(shù)據(jù)庫的數(shù)據(jù),且不會(huì)阻塞數(shù)據(jù)寫入主數(shù)據(jù)庫,從而提高了數(shù)據(jù)寫入效率,避免浪費(fèi)存儲(chǔ)空間,且進(jìn)一步提升了主數(shù)據(jù)庫和從數(shù)據(jù)庫中數(shù)據(jù)同步一致性,并且能夠克服因連接異?;蛘哌B接超時(shí)導(dǎo)致的同步失敗的缺陷,使得主數(shù)據(jù)庫和從數(shù)據(jù)庫的數(shù)據(jù)保持一致性。
[0109]圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的主從數(shù)據(jù)庫的同步裝置的結(jié)構(gòu)框圖。如圖4所示,該裝置包括:寫數(shù)據(jù)處理模塊400和同步模塊410。
[0110]寫數(shù)據(jù)處理模塊400,適于當(dāng)接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量,第一文件偏移量是主數(shù)據(jù)庫中數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量。
[0111]可選地,寫數(shù)據(jù)處理模塊400還適于:向數(shù)據(jù)寫請(qǐng)求的發(fā)起者返回?cái)?shù)據(jù)寫響應(yīng)。
[0112]同步模塊410,適于讀取主數(shù)據(jù)庫的本地日志文件,根據(jù)第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0? ?3] 可選地,同步模塊410進(jìn)一步包括:第一比較單元411和同步單元412。
[0114]第一比較單元411,適于比較第一文件偏移量和第二文件偏移量是否一致。
[0115]同步單元412,適于在第一比較單元比較出第一文件偏移量和第二文件偏移量不一致的情況下,將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0116]可選地,同步模塊410還包括:更新單元413,適于更新第二文件偏移量。
[0117]該裝置還包括:通知模塊420,適于通知從數(shù)據(jù)庫在同步數(shù)據(jù)成功后更新第三文件偏移量,第三文件偏移量是從數(shù)據(jù)庫中數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量。
[0118]可選地,同步模塊可以有多個(gè),每個(gè)從數(shù)據(jù)庫對(duì)應(yīng)有專屬于自己的同步模塊。
[0119]可選地,該裝置還包括:連接模塊430,適于若與從數(shù)據(jù)庫連接異常或者連接超時(shí),重新建立與從數(shù)據(jù)庫的連接。
[0120]同步模塊410還包括:第二比較單元414,適于在連接成功后,比較第二文件偏移量和第三文件偏移量是否一致;
[0121]更新單元413進(jìn)一步適于:在第二比較單元比較出第二文件偏移量和第三文件偏移量不一致的情況下,依據(jù)第三文件偏移量更新第二文件偏移量。
[0122]根據(jù)本發(fā)明上述實(shí)施例提供的裝置,接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量,讀取主數(shù)據(jù)庫的本地日志文件,比較第一文件偏移量和第二文件偏移量是否一致,在第一文件偏移量和第二文件偏移量不一致的情況下,將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫,更新第二文件偏移量,在從數(shù)據(jù)庫同步數(shù)據(jù)成功后,更新第三文件偏移量?;谏鲜鰧?shí)施方案,本發(fā)明無需在主數(shù)據(jù)庫針對(duì)每個(gè)從數(shù)據(jù)庫分別存儲(chǔ)日志文件,減少了對(duì)分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)的空間占用,并且數(shù)據(jù)寫入主數(shù)據(jù)庫與數(shù)據(jù)同步至從數(shù)據(jù)庫可以同時(shí)執(zhí)行,并不會(huì)因?yàn)閳?zhí)行數(shù)據(jù)同步而阻塞數(shù)據(jù)寫入主數(shù)據(jù)庫,從而提高了數(shù)據(jù)寫入效率,避免浪費(fèi)存儲(chǔ)空間,且進(jìn)一步提升了主數(shù)據(jù)庫和從數(shù)據(jù)庫中數(shù)據(jù)同步一致性。
[0123]圖5示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的主從數(shù)據(jù)庫的同步裝置的結(jié)構(gòu)框圖。如圖5所示,該裝置包括:寫數(shù)據(jù)處理模塊500和同步模塊510。
[0124]寫數(shù)據(jù)處理模塊500,適于當(dāng)接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量,第一文件偏移量是主數(shù)據(jù)庫中數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量。
[0125]可選地,寫數(shù)據(jù)處理模塊500還適于:向數(shù)據(jù)寫請(qǐng)求的發(fā)起者返回?cái)?shù)據(jù)寫響應(yīng)。
[0126]同步模塊510,適于讀取主數(shù)據(jù)庫的本地日志文件,根據(jù)第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0127]可選地,同步模塊510進(jìn)一步包括:第一比較單元511和同步單元512。
[0128]第一比較單元511,適于比較第一文件偏移量和第二文件偏移量是否一致。
[0129]同步單元512,適于在第一比較單元比較出第一文件偏移量和第二文件偏移量不一致的情況下,將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0130]可選地,同步模塊510還包括:更新單元513,適于更新第二文件偏移量。
[0131 ]可選地,裝置還包括:通知模塊520,適于通知從數(shù)據(jù)庫在同步數(shù)據(jù)成功后更新第三文件偏移量,第三文件偏移量是從數(shù)據(jù)庫中數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量。
[0132]可選地,同步模塊可以有多個(gè),每個(gè)從數(shù)據(jù)庫對(duì)應(yīng)有專屬于自己的同步模塊。
[0?33 ]可選地,裝置還包括:第一備份模塊530、第一記錄模塊540、第一發(fā)送模塊550。
[0134]第一備份模塊530,適于在接收到添加新的從數(shù)據(jù)庫的請(qǐng)求后,備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件;
[0135]第一記錄模塊540,適于記錄備份時(shí)的第一文件偏移量作為針對(duì)該新的從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量;
[0136]第一發(fā)送模塊550,適于將快照文件發(fā)送給新的從數(shù)據(jù)庫,使新的從數(shù)據(jù)庫加載主數(shù)據(jù)庫的所有數(shù)據(jù);
[0137]同步模塊510進(jìn)一步適于:在新的從數(shù)據(jù)庫正常工作后,根據(jù)當(dāng)前的第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至該新的從數(shù)據(jù)庫。
[0138]根據(jù)本發(fā)明上述實(shí)施例提供的裝置,在接收到添加新的從數(shù)據(jù)庫的請(qǐng)求后,備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件,并記錄備份時(shí)的第一文件偏移量作為針對(duì)該新的從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量,將快照文件發(fā)送給新的從數(shù)據(jù)庫,使新的從數(shù)據(jù)庫加載主數(shù)據(jù)庫的所有數(shù)據(jù),以使新的從數(shù)據(jù)庫正常工作,新的從數(shù)據(jù)庫正常工作后,將與其他從數(shù)據(jù)庫同步方法相同?;谏鲜鰧?shí)施方案,本發(fā)明無需在主數(shù)據(jù)庫針對(duì)每個(gè)從數(shù)據(jù)庫分別存儲(chǔ)日志文件,減少了對(duì)分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)的空間占用,并且數(shù)據(jù)寫入主數(shù)據(jù)庫與數(shù)據(jù)同步至從數(shù)據(jù)庫可以同時(shí)執(zhí)行,當(dāng)增加新的從數(shù)據(jù)庫后,可以使從數(shù)據(jù)庫快速地加載到主數(shù)據(jù)庫的數(shù)據(jù),且不會(huì)阻塞數(shù)據(jù)寫入主數(shù)據(jù)庫,從而提高了數(shù)據(jù)寫入效率,避免浪費(fèi)存儲(chǔ)空間,且進(jìn)一步提升了主數(shù)據(jù)庫和從數(shù)據(jù)庫中數(shù)據(jù)同步一致性。
[0139]圖6示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的主從數(shù)據(jù)庫的同步裝置的結(jié)構(gòu)框圖。如圖6所示,該裝置包括:寫數(shù)據(jù)處理模塊600和同步模塊610。
[0140]寫數(shù)據(jù)處理模塊600,適于當(dāng)接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量,第一文件偏移量是主數(shù)據(jù)庫中數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量。
[0141 ]可選地,主數(shù)據(jù)庫的本地日志文件有多個(gè),每個(gè)本地日志文件具有唯一的文件編號(hào);
[0142]本地日志文件的文件偏移量包括:文件編號(hào)和文件內(nèi)偏移量。
[0143]可選地,寫數(shù)據(jù)處理模塊600還適于:向數(shù)據(jù)寫請(qǐng)求的發(fā)起者返回?cái)?shù)據(jù)寫響應(yīng)。
[0144]同步模塊610,適于讀取主數(shù)據(jù)庫的本地日志文件,根據(jù)第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[OH5] 可選地,同步模塊610進(jìn)一步包括:第一比較單元611和同步單元612。
[0146]第一比較單元611,適于比較第一文件偏移量和第二文件偏移量是否一致。
[0147]同步單元612,適于在第一比較單元比較出第一文件偏移量和第二文件偏移量不一致的情況下,將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0148]可選地,同步模塊610還包括:更新單元613,適于更新第二文件偏移量。
[0149]可選地,該裝置還包括:通知模塊620,適于通知從數(shù)據(jù)庫在同步數(shù)據(jù)成功后更新第三文件偏移量,第三文件偏移量是從數(shù)據(jù)庫中數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量。
[0150]可選地,同步模塊可以有多個(gè),每個(gè)從數(shù)據(jù)庫對(duì)應(yīng)有專屬于自己的同步模塊。
[0151]可選地,該裝置還包括:刪除模塊630,適于每隔預(yù)設(shè)時(shí)間刪除預(yù)設(shè)數(shù)量的本地日志文件。
[0152]可選地,該裝置還包括:連接模塊640,適于若與從數(shù)據(jù)庫連接異?;蛘哌B接超時(shí),重新建立與從數(shù)據(jù)庫的連接;
[0153]同步模塊還包括:第三比較單元614,適于在連接成功后,比較第二文件偏移量和第三文件偏移量是否一致;
[0154]更新單元613進(jìn)一步適于:在第三比較單元比較出第二文件偏移量和第三文件偏移量不一致的情況下,依據(jù)第三文件偏移量更新第二文件偏移量;
[0155]可選地,該裝置還包括:查找模塊650,適于查找第二文件偏移量對(duì)應(yīng)的本地日志文件是否存在;
[0156]同步模塊610進(jìn)一步適于:在查找到第二文件偏移量對(duì)應(yīng)的本地日志文件的情況下,通過比較第一文件偏移量和第二文件偏移量是否一致進(jìn)行同步續(xù)傳;
[0157]可選地,該裝置還包括:第二備份模塊660、第二記錄模塊670、第二發(fā)送模塊680。
[0158]第二備份模塊660,適于在未查找到第二文件偏移量對(duì)應(yīng)的本地日志文件的情況下,備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件;
[0159]第二記錄模塊670,適于記錄備份時(shí)的第一文件偏移量為針對(duì)該從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量;
[0160]第二發(fā)送模塊680,適于將快照文件發(fā)送給從數(shù)據(jù)庫,使從數(shù)據(jù)庫加載主數(shù)據(jù)庫的所有數(shù)據(jù);
[0161]同步模塊610進(jìn)一步適于:在從數(shù)據(jù)庫正常工作后,根據(jù)當(dāng)前的第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至該從數(shù)據(jù)庫。
[0162]根據(jù)本發(fā)明上述實(shí)施例提供的方法,本發(fā)明無需在主數(shù)據(jù)庫針對(duì)每個(gè)從數(shù)據(jù)庫分別存儲(chǔ)日志文件,減少了對(duì)分布式數(shù)據(jù)存儲(chǔ)系統(tǒng)的空間占用,并且數(shù)據(jù)寫入主數(shù)據(jù)庫與數(shù)據(jù)同步至從數(shù)據(jù)庫可以同時(shí)執(zhí)行,當(dāng)增加新的從數(shù)據(jù)庫后,可以使從數(shù)據(jù)庫快速地加載到主數(shù)據(jù)庫的數(shù)據(jù),且不會(huì)阻塞數(shù)據(jù)寫入主數(shù)據(jù)庫,從而提高了數(shù)據(jù)寫入效率,避免浪費(fèi)存儲(chǔ)空間,且進(jìn)一步提升了主數(shù)據(jù)庫和從數(shù)據(jù)庫中數(shù)據(jù)同步一致性,并且能夠克服因連接異?;蛘哌B接超時(shí)導(dǎo)致的同步失敗的缺陷,使得主數(shù)據(jù)庫和從數(shù)據(jù)庫的數(shù)據(jù)保持一致性。
[0163]針對(duì)上述全部實(shí)施例,寫數(shù)據(jù)處理模塊進(jìn)一步適于:將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件的一個(gè)或多個(gè)分塊中。
[0164]可選地,寫數(shù)據(jù)處理模塊進(jìn)一步適于:在記錄每條數(shù)據(jù)寫操作之前,在分塊中記錄數(shù)據(jù)寫操作的元信息。
[0165]可選地,數(shù)據(jù)寫操作的元信息包含:數(shù)據(jù)寫操作的占用字節(jié)數(shù)和用于表明當(dāng)前分塊包含全部或部分?jǐn)?shù)據(jù)寫操作的標(biāo)識(shí)。
[0166]在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
[0167]在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說明書的理解。
[0168]類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循【具體實(shí)施方式】的權(quán)利要求書由此明確地并入該【具體實(shí)施方式】,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
[0169]本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中。可以把實(shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。
[0170]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。
[0171]本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的主從數(shù)據(jù)庫的同步設(shè)備中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
[0172]應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過同一個(gè)硬件項(xiàng)來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
[0173]本發(fā)明公開了:A1、一種主從數(shù)據(jù)庫的同步方法,其包括:
[0174]當(dāng)接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量,所述第一文件偏移量是主數(shù)據(jù)庫數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量;
[0175]讀取所述主數(shù)據(jù)庫的本地日志文件,根據(jù)所述第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0176]A2、根據(jù)Al所述的方法,其中,在所述將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中之后,所述方法還包括:向所述數(shù)據(jù)寫請(qǐng)求的發(fā)起者返回?cái)?shù)據(jù)寫響應(yīng)。
[0177]A3、根據(jù)Al所述的方法,其中,所述根據(jù)第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫進(jìn)一步包括:
[0178]比較所述第一文件偏移量和第二文件偏移量是否一致,所述第二文件偏移量是已同步至從數(shù)據(jù)庫的數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量;
[0179]若不一致,則將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0180]A4、根據(jù)A3所述的方法,其中,在將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫之后,所述方法還包括:
[0181 ]更新所述第二文件偏移量;
[0182]在從數(shù)據(jù)庫同步數(shù)據(jù)成功后,更新第三文件偏移量,所述第三文件偏移量是從數(shù)據(jù)庫數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量。
[0183]A5、根據(jù)A1-A4任一項(xiàng)所述的方法,其中,所述讀取主數(shù)據(jù)庫的本地日志文件,根據(jù)所述第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫的步驟由同步線程執(zhí)行,每個(gè)從數(shù)據(jù)庫具有專屬于自己的同步線程。
[0184]A6、根據(jù)A4所述的方法,其中,所述方法還包括:
[0185]在接收到添加新的從數(shù)據(jù)庫的請(qǐng)求后,備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件,并記錄備份時(shí)的第一文件偏移量作為針對(duì)該新的從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量;
[0186]將所述快照文件發(fā)送給新的從數(shù)據(jù)庫,使所述新的從數(shù)據(jù)庫加載主數(shù)據(jù)庫的所有數(shù)據(jù);
[0187]在所述新的從數(shù)據(jù)庫正常工作后,根據(jù)當(dāng)前的第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至該新的從數(shù)據(jù)庫。
[0188]A7、根據(jù)A4所述的方法,其中,所述方法還包括:
[0189]若從數(shù)據(jù)庫發(fā)現(xiàn)連接異?;蛘哌B接超時(shí),重新發(fā)起連接;
[0190]在連接成功后,比較所述第二文件偏移量和所述第三文件偏移量是否一致,若不一致,則依據(jù)第三文件偏移量更新所述第二文件偏移量。
[0191]AS、根據(jù)A4所述的方法,其中,所述主數(shù)據(jù)庫的本地日志文件有多個(gè),每個(gè)本地日志文件具有唯一的文件編號(hào);
[0192]所述本地日志文件的文件偏移量包括:文件編號(hào)和文件內(nèi)偏移量。
[0193]A9、根據(jù)AS所述的方法,其中,所述方法還包括:每隔預(yù)設(shè)時(shí)間刪除預(yù)設(shè)數(shù)量的本地日志文件。
[0194]A10、根據(jù)A9所述的方法,其中,所述方法還包括:
[0195]若從數(shù)據(jù)庫發(fā)現(xiàn)連接異?;蛘哌B接超時(shí),重新發(fā)起連接;
[0196]在連接成功后,比較所述第二文件偏移量和所述第三文件偏移量是否一致,若不一致,則依據(jù)第三文件偏移量更新所述第二文件偏移量;
[0197]查找所述第二文件偏移量對(duì)應(yīng)的本地日志文件是否存在;
[0198]若存在,則通過比較所述第一文件偏移量和第二文件偏移量是否一致進(jìn)行同步續(xù)傳;
[0199]若不存在,則備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件,記錄備份時(shí)的第一文件偏移量為針對(duì)該從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量;將所述快照文件發(fā)送給從數(shù)據(jù)庫,使所述從數(shù)據(jù)庫加載主數(shù)據(jù)庫的所有數(shù)據(jù);在所述從數(shù)據(jù)庫正常工作后,根據(jù)當(dāng)前的第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至該從數(shù)據(jù)庫。
[0200]AU、根據(jù)Al-AlO任一項(xiàng)所述的方法,其中,所述將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中進(jìn)一步包括:將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件的一個(gè)或多個(gè)分塊中。
[0201]A12、根據(jù)All所述的方法,其中,在將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件的一個(gè)或多個(gè)分塊中時(shí),所述方法還包括:在記錄每條數(shù)據(jù)寫操作之前,在分塊中記錄數(shù)據(jù)寫操作的元信息。
[0202]A13、根據(jù)A12所述的方法,其中,數(shù)據(jù)寫操作的元信息包含:數(shù)據(jù)寫操作的占用字節(jié)數(shù)和用于表明當(dāng)前分塊包含全部或部分?jǐn)?shù)據(jù)寫操作的標(biāo)識(shí)。
[0203]本發(fā)明還公開了:B14、一種主從數(shù)據(jù)庫的同步裝置,其包括:
[0204]寫數(shù)據(jù)處理模塊,適于當(dāng)接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量,所述第一文件偏移量是主數(shù)據(jù)庫數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量;
[0205]同步模塊,適于讀取所述主數(shù)據(jù)庫的本地日志文件,根據(jù)所述第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0206]B15、根據(jù)B14所述的裝置,其中,所述寫數(shù)據(jù)處理模塊還適于:向所述數(shù)據(jù)寫請(qǐng)求的發(fā)起者返回?cái)?shù)據(jù)寫響應(yīng)。
[0207]B16、根據(jù)B14所述的裝置,其中,所述同步模塊進(jìn)一步包括:
[0208]第一比較單元,適于比較所述第一文件偏移量和第二文件偏移量是否一致;
[0209]同步單元,適于在所述第一比較單元比較出所述第一文件偏移量和第二文件偏移量不一致的情況下,將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
[0210]B17、根據(jù)B16所述的裝置,其中,所述同步模塊還包括:更新單元,適于更新所述第二文件偏移量;
[0211 ]所述裝置還包括:通知模塊,適于通知從數(shù)據(jù)庫在同步數(shù)據(jù)成功后更新第三文件偏移量,所述第三文件偏移量是從數(shù)據(jù)庫數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量。
[0212]B18、根據(jù)B14-B17任一項(xiàng)所述的裝置,其中,所述同步模塊為多個(gè),每個(gè)從數(shù)據(jù)庫對(duì)應(yīng)有專屬于自己的同步模塊。
[0213]B19、根據(jù)B17所述的裝置,其中,所述裝置還包括:
[0214]第一備份模塊,適于在接收到添加新的從數(shù)據(jù)庫的請(qǐng)求后,備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件;
[0215]第一記錄模塊,適于記錄備份時(shí)的第一文件偏移量作為針對(duì)該新的從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量;
[0216]第一發(fā)送模塊,適于將所述快照文件發(fā)送給新的從數(shù)據(jù)庫,使所述新的從數(shù)據(jù)庫加載主數(shù)據(jù)庫的所有數(shù)據(jù);
[0217]同步模塊進(jìn)一步適于:在所述新的從數(shù)據(jù)庫正常工作后,根據(jù)當(dāng)前的第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至該新的從數(shù)據(jù)庫。
[0218]B20、根據(jù)B17所述的裝置,其中,所述裝置還包括:連接模塊,適于若與從數(shù)據(jù)庫連接異?;蛘哌B接超時(shí),重新建立與從數(shù)據(jù)庫的連接;
[0219]所述同步模塊還包括:
[0220]第二比較單元,適于在連接成功后,比較所述第二文件偏移量和所述第三文件偏移量是否一致;
[0221]所述更新單元進(jìn)一步適于:在所述第二比較單元比較出所述第二文件偏移量和所述第三文件偏移量不一致的情況下,依據(jù)第三文件偏移量更新所述第二文件偏移量。
[0222]B21、根據(jù)B17所述的裝置,其中,所述主數(shù)據(jù)庫的本地日志文件有多個(gè),每個(gè)本地日志文件具有唯一的文件編號(hào);
[0223]所述本地日志文件的文件偏移量包括:文件編號(hào)和文件內(nèi)偏移量。
[0224]B22、根據(jù)B21所述的裝置,其中,所述裝置還包括:刪除模塊,適于每隔預(yù)設(shè)時(shí)間刪除預(yù)設(shè)數(shù)量的本地日志文件。
[0225]B23、根據(jù)B22所述的裝置,其中,所述裝置還包括:連接模塊,適于若與從數(shù)據(jù)庫連接異常或者連接超時(shí),重新建立與從數(shù)據(jù)庫的連接;
[0226]所述同步模塊還包括:第三比較單元,適于在連接成功后,比較所述第二文件偏移量和所述第三文件偏移量是否一致;
[0227]所述更新單元進(jìn)一步適于:在所述第三比較單元比較出所述第二文件偏移量和所述第三文件偏移量不一致的情況下,依據(jù)第三文件偏移量更新所述第二文件偏移量;
[0228]所述裝置還包括:查找模塊,適于查找所述第二文件偏移量對(duì)應(yīng)的本地日志文件是否存在;
[0229]所述同步模塊進(jìn)一步適于:在查找到所述第二文件偏移量對(duì)應(yīng)的本地日志文件的情況下,通過比較所述第一文件偏移量和第二文件偏移量是否一致進(jìn)行同步續(xù)傳;
[0230]所述裝置還包括:
[0231]第二備份模塊,適于在未查找到所述第二文件偏移量對(duì)應(yīng)的本地日志文件的情況下,備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件;
[0232]第二記錄模塊,適于記錄備份時(shí)的第一文件偏移量為針對(duì)該從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量;
[0233]第二發(fā)送模塊,適于將所述快照文件發(fā)送給從數(shù)據(jù)庫,使所述從數(shù)據(jù)庫加載主數(shù)據(jù)庫的所有數(shù)據(jù);
[0234]所述同步模塊進(jìn)一步適于:在所述從數(shù)據(jù)庫正常工作后,根據(jù)當(dāng)前的第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至該從數(shù)據(jù)庫。
[0235]B24、根據(jù)B14-B23任一項(xiàng)所述的裝置,其中,所述寫數(shù)據(jù)處理模塊進(jìn)一步適于:將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件的一個(gè)或多個(gè)分塊中。
[0236]B25、根據(jù)B24所述的裝置,其中,所述寫數(shù)據(jù)處理模塊進(jìn)一步適于:在記錄每條數(shù)據(jù)寫操作之前,在分塊中記錄數(shù)據(jù)寫操作的元信息。
[0237]B26、根據(jù)B25所述的裝置,其中,數(shù)據(jù)寫操作的元信息包含:數(shù)據(jù)寫操作的占用字節(jié)數(shù)和用于表明當(dāng)前分塊包含全部或部分?jǐn)?shù)據(jù)寫操作的標(biāo)識(shí)。
【主權(quán)項(xiàng)】
1.一種主從數(shù)據(jù)庫的同步方法,其包括: 當(dāng)接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量,所述第一文件偏移量是主數(shù)據(jù)庫數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量; 讀取所述主數(shù)據(jù)庫的本地日志文件,根據(jù)所述第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。2.根據(jù)權(quán)利要求1所述的方法,其中,在所述將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中之后,所述方法還包括:向所述數(shù)據(jù)寫請(qǐng)求的發(fā)起者返回?cái)?shù)據(jù)寫響應(yīng)。3.根據(jù)權(quán)利要求1所述的方法,其中,所述根據(jù)第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫進(jìn)一步包括: 比較所述第一文件偏移量和第二文件偏移量是否一致,所述第二文件偏移量是已同步至從數(shù)據(jù)庫的數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量; 若不一致,則將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。4.根據(jù)權(quán)利要求3所述的方法,其中,在將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫之后,所述方法還包括: 更新所述第二文件偏移量; 在從數(shù)據(jù)庫同步數(shù)據(jù)成功后,更新第三文件偏移量,所述第三文件偏移量是從數(shù)據(jù)庫數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量。5.根據(jù)權(quán)利要求1-4任一項(xiàng)所述的方法,其中,所述讀取主數(shù)據(jù)庫的本地日志文件,根據(jù)所述第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫的步驟由同步線程執(zhí)行,每個(gè)從數(shù)據(jù)庫具有專屬于自己的同步線程。6.根據(jù)權(quán)利要求4所述的方法,其中,所述方法還包括: 在接收到添加新的從數(shù)據(jù)庫的請(qǐng)求后,備份包含主數(shù)據(jù)庫所有數(shù)據(jù)的快照文件,并記錄備份時(shí)的第一文件偏移量作為針對(duì)該新的從數(shù)據(jù)庫的第二文件偏移量和第三文件偏移量; 將所述快照文件發(fā)送給新的從數(shù)據(jù)庫,使所述新的從數(shù)據(jù)庫加載主數(shù)據(jù)庫的所有數(shù)據(jù); 在所述新的從數(shù)據(jù)庫正常工作后,根據(jù)當(dāng)前的第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至該新的從數(shù)據(jù)庫。7.根據(jù)權(quán)利要求4所述的方法,其中,所述方法還包括: 若從數(shù)據(jù)庫發(fā)現(xiàn)連接異常或者連接超時(shí),重新發(fā)起連接; 在連接成功后,比較所述第二文件偏移量和所述第三文件偏移量是否一致,若不一致,則依據(jù)第三文件偏移量更新所述第二文件偏移量。8.根據(jù)權(quán)利要求4所述的方法,其中,所述主數(shù)據(jù)庫的本地日志文件有多個(gè),每個(gè)本地日志文件具有唯一的文件編號(hào); 所述本地日志文件的文件偏移量包括:文件編號(hào)和文件內(nèi)偏移量。9.根據(jù)權(quán)利要求8所述的方法,其中,所述方法還包括:每隔預(yù)設(shè)時(shí)間刪除預(yù)設(shè)數(shù)量的本地日志文件。10.一種主從數(shù)據(jù)庫的同步裝置,其包括: 寫數(shù)據(jù)處理模塊,適于當(dāng)接收到數(shù)據(jù)寫請(qǐng)求時(shí),將數(shù)據(jù)寫入主數(shù)據(jù)庫中,并將數(shù)據(jù)寫操作順序記錄到主數(shù)據(jù)庫的本地日志文件中,并更新第一文件偏移量,所述第一文件偏移量是主數(shù)據(jù)庫數(shù)據(jù)對(duì)應(yīng)于本地日志文件的文件偏移量; 同步模塊,適于讀取所述主數(shù)據(jù)庫的本地日志文件,根據(jù)所述第一文件偏移量將新增的數(shù)據(jù)寫操作對(duì)應(yīng)的數(shù)據(jù)同步至從數(shù)據(jù)庫。
【文檔編號(hào)】G06F17/30GK105912628SQ201610213531
【公開日】2016年8月31日
【申請(qǐng)日】2016年4月7日
【發(fā)明人】宋昭
【申請(qǐng)人】北京奇虎科技有限公司, 奇智軟件(北京)有限公司