亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種用于數(shù)據(jù)庫(kù)的寫入互斥方法及裝置的制造方法

文檔序號(hào):9687473閱讀:518來源:國(guó)知局
一種用于數(shù)據(jù)庫(kù)的寫入互斥方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及數(shù)據(jù)庫(kù)領(lǐng)域,具體涉及一種用于數(shù)據(jù)庫(kù)的寫入互斥方法。本申請(qǐng)同時(shí)提供一種用于數(shù)據(jù)庫(kù)的寫入互斥裝置。
【背景技術(shù)】
[0002]MySQL是一個(gè)開放源碼的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),通常采用主從同步的架構(gòu)方式,即:一臺(tái)主服務(wù)器負(fù)責(zé)處理寫入操作和少量的讀操作,一臺(tái)或者多臺(tái)從服務(wù)器(或稱備用服務(wù)器)負(fù)責(zé)處理讀操作,從而實(shí)現(xiàn)負(fù)載均衡,縮短對(duì)用戶訪問請(qǐng)求的響應(yīng)時(shí)間。針對(duì)上述主從同步的架構(gòu)方式,MySQL數(shù)據(jù)庫(kù)系統(tǒng)提供了采用二進(jìn)制日志文件Binlog來實(shí)現(xiàn)主、從數(shù)據(jù)庫(kù)之間的數(shù)據(jù)復(fù)制功能。
[0003]然而隨著數(shù)據(jù)庫(kù)技術(shù)以及數(shù)據(jù)庫(kù)業(yè)務(wù)的發(fā)展,上述主從復(fù)制功能已無法滿足多變的用戶需求,例如,有的數(shù)據(jù)庫(kù)業(yè)務(wù)只需要將MySQL數(shù)據(jù)庫(kù)中的部分庫(kù)或者表中的數(shù)據(jù)同步到目標(biāo)MySQL數(shù)據(jù)庫(kù)中;有的業(yè)務(wù)則需要把其他關(guān)系型數(shù)據(jù)庫(kù),甚至nosql數(shù)據(jù)庫(kù)中的數(shù)據(jù)同步到目的MySQL數(shù)據(jù)庫(kù)中?;谶@些需求,出現(xiàn)了采用外部程序?qū)崿F(xiàn)數(shù)據(jù)庫(kù)之間數(shù)據(jù)同步的實(shí)現(xiàn)方式。
[0004]通過外部程序?qū)崿F(xiàn)數(shù)據(jù)庫(kù)之間的同步時(shí),通常由一個(gè)進(jìn)程負(fù)責(zé)兩個(gè)數(shù)據(jù)庫(kù)的同步,即:從源數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),經(jīng)過必要的處理后,再通過與目標(biāo)數(shù)據(jù)庫(kù)之間建立的一條或者多條連接將數(shù)據(jù)寫入目標(biāo)數(shù)據(jù)庫(kù)中。為了保障數(shù)據(jù)同步過程的順利執(zhí)行,通常還會(huì)啟動(dòng)一個(gè)負(fù)責(zé)容災(zāi)的模塊(簡(jiǎn)稱容災(zāi)模塊),該模塊通過偵聽同步進(jìn)程定期(例如每隔5秒或者10秒)發(fā)送的心跳數(shù)據(jù)包來監(jiān)測(cè)同步進(jìn)程的工作狀態(tài),當(dāng)容災(zāi)模塊在預(yù)先設(shè)定的一段時(shí)間內(nèi)(例如I分鐘)沒有收到同步進(jìn)程的心跳數(shù)據(jù)包,則認(rèn)為同步進(jìn)程出現(xiàn)故障,容災(zāi)模塊會(huì)啟動(dòng)一個(gè)新的同步進(jìn)程來接管當(dāng)前的數(shù)據(jù)同步過程,從而使得數(shù)據(jù)同步過程依然正常進(jìn)行。
[0005]上述實(shí)現(xiàn)方式,通??梢员WC數(shù)據(jù)同步過程的順利執(zhí)行,然而在具體實(shí)現(xiàn)中,可能出現(xiàn)容災(zāi)模塊發(fā)生誤判的情況,例如,因?yàn)榫W(wǎng)絡(luò)連接故障(網(wǎng)線斷開),導(dǎo)致同步進(jìn)程和容災(zāi)模塊之間的網(wǎng)絡(luò)通信被中斷,容災(zāi)模塊在預(yù)先設(shè)定的一段時(shí)間內(nèi)沒有接收到同步進(jìn)程的心跳數(shù)據(jù)包,容災(zāi)模塊會(huì)因此啟動(dòng)新的同步進(jìn)程,在這種情況下,就會(huì)出現(xiàn)兩個(gè)同步進(jìn)程同時(shí)向同一個(gè)目標(biāo)MySQL數(shù)據(jù)庫(kù)寫入數(shù)據(jù)的問題,從而導(dǎo)致目標(biāo)MySQL數(shù)據(jù)庫(kù)中的數(shù)據(jù)錯(cuò)誤。

【發(fā)明內(nèi)容】

[0006]本申請(qǐng)?zhí)峁┮环N用于數(shù)據(jù)庫(kù)的寫入互斥方法,以解決兩個(gè)執(zhí)行同一寫入任務(wù)的進(jìn)程同時(shí)向目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)而導(dǎo)致數(shù)據(jù)錯(cuò)誤的問題。本申請(qǐng)另外提供一種用于數(shù)據(jù)庫(kù)的寫入互斥裝置。
[0007]本申請(qǐng)?zhí)峁┮环N用于數(shù)據(jù)庫(kù)的寫入互斥方法,所述方法在向同一個(gè)目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行同一寫入任務(wù)的進(jìn)程中實(shí)施,包括:
[0008]采用為所述進(jìn)程預(yù)先指定的統(tǒng)一的用戶名創(chuàng)建用于向目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)的連接,所述目標(biāo)數(shù)據(jù)庫(kù)為每個(gè)與其建立的連接分配唯一的連接標(biāo)識(shí);
[0009]獲取已創(chuàng)建連接的連接標(biāo)識(shí),作為本地連接標(biāo)識(shí);
[0010]獲取所述目標(biāo)數(shù)據(jù)庫(kù)中采用所述用戶名的所有連接的連接標(biāo)識(shí)列表;
[0011]判斷所述連接標(biāo)識(shí)列表中是否存在不同于所述本地連接標(biāo)識(shí)的其他連接標(biāo)識(shí);
[0012]若是,關(guān)閉已創(chuàng)建的連接;若否,使用已創(chuàng)建的連接向所述目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)。
[0013]可選的,所述目標(biāo)數(shù)據(jù)庫(kù)為MySQL數(shù)據(jù)庫(kù)。
[0014]可選的,所述采用為所述進(jìn)程預(yù)先指定的統(tǒng)一的用戶名創(chuàng)建用于向目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)的連接,采用如下方式實(shí)現(xiàn):
[0015]調(diào)用MySQL C API提供的mysql_connect O函數(shù),并將該函數(shù)的用戶名參數(shù)的值設(shè)置為所述預(yù)先指定的統(tǒng)一的用戶名。
[0016]可選的,所述獲取所述目標(biāo)數(shù)據(jù)庫(kù)中采用所述用戶名的所有連接的連接標(biāo)識(shí)列表,采用如下方式實(shí)現(xiàn):
[0017]執(zhí)行SQL語(yǔ)句從PROCESSLIST表中查詢采用所述用戶名的所有連接的連接標(biāo)識(shí)列表,所述PROCESSLIST表存儲(chǔ)在目標(biāo)MySQL數(shù)據(jù)庫(kù)的informat1n_schema庫(kù)中。
[0018]可選的,所述創(chuàng)建用于向目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)的連接是指,按照預(yù)先設(shè)定的連接數(shù)目,依次創(chuàng)建用于向目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)的多條連接。
[0019]可選的,所述獲取已創(chuàng)建連接的連接標(biāo)識(shí)作為本地連接標(biāo)識(shí)是指,依次獲取已創(chuàng)建的每條連接的連接標(biāo)識(shí),組成本地連接標(biāo)識(shí)列表。
[0020]可選的,所述判斷所述連接標(biāo)識(shí)列表中是否存在不同于所述本地連接標(biāo)識(shí)的其他連接標(biāo)識(shí)是指,判斷是否存在滿足下列條件的連接標(biāo)識(shí):該連接標(biāo)識(shí)包含在從所述目標(biāo)數(shù)據(jù)庫(kù)獲取的連接標(biāo)識(shí)列表中、但是未包含在本地連接標(biāo)識(shí)列表中。
[0021]可選的,當(dāng)所述判斷所述連接標(biāo)識(shí)列表中是否存在不同于所述本地連接標(biāo)識(shí)的其他連接標(biāo)識(shí)的輸出為“否”時(shí),在執(zhí)行所述使用已創(chuàng)建的連接向所述目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)的步驟之前,執(zhí)行下述操作:
[0022]判斷已創(chuàng)建的連接數(shù)目是否小于預(yù)先設(shè)定的連接數(shù)目;
[0023]若是,按照預(yù)先設(shè)定的連接數(shù)目,依次創(chuàng)建用于向目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)的多條連接;相應(yīng)的,所述使用已創(chuàng)建的連接向所述目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)是指,使用已創(chuàng)建的多條連接向所述目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)。
[0024]相應(yīng)的,本申請(qǐng)還提供一種用于數(shù)據(jù)庫(kù)的寫入互斥裝置,所述裝置部署在向同一個(gè)目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行同一寫入任務(wù)的設(shè)備中,包括:
[0025]連接創(chuàng)建單元,用于采用預(yù)先指定的統(tǒng)一的用戶名創(chuàng)建用于向目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)的連接,所述目標(biāo)數(shù)據(jù)庫(kù)為每個(gè)與其建立的連接分配唯一的連接標(biāo)識(shí);
[0026]本地標(biāo)識(shí)獲取單元,用于獲取已創(chuàng)建連接的連接標(biāo)識(shí),作為本地連接標(biāo)識(shí);
[0027]標(biāo)識(shí)列表獲取單元,用于獲取所述目標(biāo)數(shù)據(jù)庫(kù)中采用所述用戶名的所有連接的連接標(biāo)識(shí)列表;
[0028]連接標(biāo)識(shí)判斷單元,用于判斷所述連接標(biāo)識(shí)列表中是否存在不同于所述本地連接標(biāo)識(shí)的其他連接標(biāo)識(shí);
[0029]連接關(guān)閉單元,用于當(dāng)所述連接標(biāo)識(shí)判斷單元的輸出為“是”時(shí),關(guān)閉已創(chuàng)建的連接;
[0030]數(shù)據(jù)寫入單元,用于當(dāng)所述連接標(biāo)識(shí)判斷單元的輸出為“否”時(shí),使用已創(chuàng)建的連接向所述目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)。
[0031 ] 可選的,所述目標(biāo)數(shù)據(jù)庫(kù)為MySQL數(shù)據(jù)庫(kù)。
[0032]可選的,所述連接創(chuàng)建單元具體用于,調(diào)用MySQL C API提供的mysql_connect O函數(shù)來創(chuàng)建向目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)的連接,并且在調(diào)用該函數(shù)時(shí)將用戶名參數(shù)的值設(shè)置為所述預(yù)先指定的統(tǒng)一的用戶名。
[0033]可選的,所述標(biāo)識(shí)列表獲取單元具體用于,執(zhí)行SQL語(yǔ)句從PROCESSLIST表中查詢采用所述用戶名的所有連接的連接標(biāo)識(shí)列表,所述PROCESSLIST表存儲(chǔ)在目標(biāo)MySQL數(shù)據(jù)庫(kù)的 informat1n_schema 庫(kù)中。
[0034]可選的,所述連接創(chuàng)建單元具體用于,按照預(yù)先設(shè)定的連接數(shù)目,依次創(chuàng)建用于向目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)的多條連接。
[0035]可選的,所述本地標(biāo)識(shí)獲取單元具體用于,依次獲取已創(chuàng)建的每條連接的連接標(biāo)識(shí),組成本地連接標(biāo)識(shí)列表。
[0036]可選的,所述連接標(biāo)識(shí)判斷單元具體用于,判斷是否存在滿足下列條件的連接標(biāo)識(shí):該連接標(biāo)識(shí)包含在從所述目標(biāo)數(shù)據(jù)庫(kù)獲取的連接標(biāo)識(shí)列表中、但是未包含在本地連接標(biāo)識(shí)列表中。
[0037]可選的,所述裝置還包括:
[0038]連接數(shù)目判斷單元,用于當(dāng)所述連接標(biāo)識(shí)判斷單元的輸出為“否”時(shí),判斷已創(chuàng)建的連接數(shù)目是否小于預(yù)先設(shè)定的連接數(shù)目;
[0039]連接循環(huán)創(chuàng)建單元,用于當(dāng)所述連接數(shù)目判斷單元的輸出為“是”時(shí),按照預(yù)先設(shè)定的連接數(shù)目,依次創(chuàng)建用于向目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)的多條連接;相應(yīng)的,所述數(shù)據(jù)寫入單元具體用于,使用所述連接循環(huán)創(chuàng)建單元?jiǎng)?chuàng)建的多條連接向所述目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)。
[0040]與現(xiàn)有技術(shù)相比,本申請(qǐng)具有以下優(yōu)點(diǎn):
[0041]本申請(qǐng)?zhí)峁┑囊环N用于數(shù)據(jù)庫(kù)的寫入互斥方法,采用預(yù)先指定的統(tǒng)一的用戶名創(chuàng)建用于向目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行寫入操作的連接并獲取對(duì)應(yīng)的連接標(biāo)識(shí),然后判斷目標(biāo)數(shù)據(jù)庫(kù)中采用同一用戶名的連接標(biāo)識(shí)列表中是否存在不同于上述連接標(biāo)識(shí)的其他連接標(biāo)識(shí),若是,關(guān)閉已創(chuàng)建的連接;若否,使用已創(chuàng)建的連接向所述目標(biāo)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)。采用上述方法,充分利用了目標(biāo)數(shù)據(jù)庫(kù)為每個(gè)連接分配唯一標(biāo)識(shí)的特性,通過對(duì)連接標(biāo)識(shí)的校驗(yàn),可以獲知是否已經(jīng)存在其他進(jìn)程創(chuàng)建的向目標(biāo)數(shù)據(jù)庫(kù)執(zhí)行寫入操作的連接,從而實(shí)現(xiàn)了互斥檢測(cè)功能,避免兩個(gè)進(jìn)程同時(shí)
當(dāng)前第1頁(yè)1 2 3 4 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1