訪問(wèn)數(shù)據(jù)庫(kù)的方法及裝置的制造方法
【專利摘要】本發(fā)明提供了一種訪問(wèn)數(shù)據(jù)庫(kù)的方法及裝置,該方法包括:接收來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求;對(duì)所述請(qǐng)求進(jìn)行類型分析,以確定所述請(qǐng)求是否為數(shù)據(jù)寫入請(qǐng)求;以及當(dāng)所述請(qǐng)求為數(shù)據(jù)寫入請(qǐng)求時(shí),將所述請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)的緩存層。本發(fā)明實(shí)施例直接將數(shù)據(jù)寫入請(qǐng)求相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的緩存層,并向客戶端返回響應(yīng)消息,其能夠提高后續(xù)對(duì)所述數(shù)據(jù)讀取的效率。
【專利說(shuō)明】
訪問(wèn)數(shù)據(jù)庫(kù)的方法及裝置
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別是一種訪問(wèn)數(shù)據(jù)庫(kù)的方法及裝置。
【背景技術(shù)】
[0002]隨著社會(huì)的發(fā)展,大量的數(shù)據(jù)需要存儲(chǔ)起來(lái),對(duì)存儲(chǔ)的數(shù)據(jù),根據(jù)不同用戶的需求應(yīng)用一定的數(shù)據(jù)訪問(wèn)方法進(jìn)行處理,數(shù)據(jù)庫(kù)就是適應(yīng)這種需求的一種技術(shù)。簡(jiǎn)單來(lái)說(shuō),數(shù)據(jù)庫(kù)是數(shù)據(jù)以一種能夠持久保存,并且可以被操作的方式來(lái)保存的數(shù)據(jù)集合。
[0003]在實(shí)際應(yīng)用中,用戶可以對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行讀寫操作,如增加、刪除、修改、查詢等操作。相關(guān)技術(shù)中,以Ieveldb為代表的LSM Tree數(shù)據(jù)庫(kù)為例,當(dāng)用戶對(duì)數(shù)據(jù)庫(kù)中的熱數(shù)據(jù)進(jìn)行讀取操作時(shí),數(shù)據(jù)庫(kù)接收到用戶客戶端發(fā)出的讀取操作請(qǐng)求后,會(huì)從本地文件中去查找,之后向用戶客戶端返回響應(yīng)消息。這樣的讀取方式,其讀性能較低,滿足不了需要大量請(qǐng)求熱數(shù)據(jù)的情況。因而,亟待解決這一技術(shù)問(wèn)題。
【發(fā)明內(nèi)容】
[0004]鑒于上述問(wèn)題,提出了本發(fā)明以便提供一種克服上述問(wèn)題或者至少部分地解決上述問(wèn)題的訪問(wèn)數(shù)據(jù)庫(kù)的方法及相應(yīng)的裝置。
[0005]依據(jù)本發(fā)明的一方面,提供了一種訪問(wèn)數(shù)據(jù)庫(kù)的方法,包括:
[0006]接收來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求;
[0007]對(duì)所述請(qǐng)求進(jìn)行類型分析,以確定所述請(qǐng)求是否為數(shù)據(jù)寫入請(qǐng)求;以及
[0008]當(dāng)所述請(qǐng)求為數(shù)據(jù)寫入請(qǐng)求時(shí),將所述請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)的緩存層。
[0009]可選地,所述方法還包括:
[0010]當(dāng)所述請(qǐng)求為數(shù)據(jù)的讀取請(qǐng)求時(shí),在所述緩存層中查找所述請(qǐng)求相應(yīng)的數(shù)據(jù),并將查找到的所述數(shù)據(jù)返回給所述客戶端。
[0011 ] 可選地,所述將所述請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)的緩存層的步驟進(jìn)一步包括:
[0012]調(diào)用第一線程,并利用所述第一線程將所述請(qǐng)求相應(yīng)的寫入操作記錄至所述本地日志并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述緩存層。
[0013]可選地,所述方法還包括:
[0014]調(diào)用第二線程并利用所述第二線程掃描所述本地日志以確定所述本地日志中是否存在日志增量,其中所述第二線程與所述第一線程異步;以及
[0015]若發(fā)現(xiàn)所述本地日志中存在日志增量,則將所述日志增量相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)中。
[0016]可選地,所述利用所述第二線程掃描所述本地日志以確定所述本地日志中是否存在日志增量的步驟進(jìn)一步包括:
[0017]利用所述第二線程掃描所述本地日志,確定所述本地日志中是否存在未被標(biāo)記的日志記錄;以及
[0018]若是,則確定所述未被標(biāo)記的日志記錄為所述日志增量。
[0019]可選地,所述將所述日志增量相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)中之后,所述方法還包括:
[0020]在所述本地日志中對(duì)所述日志增量相應(yīng)的日志記錄進(jìn)行標(biāo)記。
[0021 ] 可選地,所述方法還包括:
[0022]刪除所述本地日志中已被標(biāo)記的日志記錄。
[0023]可選地,所述方法還包括:
[0024]在所述數(shù)據(jù)庫(kù)出現(xiàn)故障重新啟動(dòng)后,掃描所述本地日志,確定所述本地日志中是否存在未被標(biāo)記的日志記錄;以及
[0025]若是,則將所述未被標(biāo)記的日志記錄相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù),并在所述本地日志中對(duì)所述未被標(biāo)記的日志記錄進(jìn)行標(biāo)記。
[0026]可選地,所述方法還包括:
[0027]當(dāng)所述請(qǐng)求為數(shù)據(jù)的讀取請(qǐng)求時(shí),若在所述緩存層中未查找到所述請(qǐng)求相應(yīng)的數(shù)據(jù),則將所述請(qǐng)求轉(zhuǎn)發(fā)至所述數(shù)據(jù)庫(kù);以及
[0028]在所述數(shù)據(jù)庫(kù)中查找所述請(qǐng)求相應(yīng)的數(shù)據(jù),將查找到的所述請(qǐng)求相應(yīng)的數(shù)據(jù)返回給所述客戶端,并在所述緩存層中緩存所述請(qǐng)求相應(yīng)的數(shù)據(jù)。
[0029]可選地,所述緩存層為分布式的高速緩存系統(tǒng)memcached。
[0030]依據(jù)本發(fā)明的另一方面,還提供了一種訪問(wèn)數(shù)據(jù)庫(kù)的裝置,包括:
[0031]請(qǐng)求接收模塊,適于接收來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求;
[0032]請(qǐng)求分析模塊,適于對(duì)所述請(qǐng)求進(jìn)行類型分析,以確定所述請(qǐng)求是否為數(shù)據(jù)寫入請(qǐng)求;以及
[0033]第一寫入模塊,適于當(dāng)所述請(qǐng)求分析模塊確定所述請(qǐng)求為數(shù)據(jù)的寫入請(qǐng)求時(shí),將所述請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)的緩存層。
[0034]可選地,所述裝置還包括:
[0035]讀取模塊,適于當(dāng)所述請(qǐng)求分析模塊確定所述請(qǐng)求為數(shù)據(jù)的讀取請(qǐng)求時(shí),在所述緩存層中查找所述請(qǐng)求相應(yīng)的數(shù)據(jù),并將查找到的所述數(shù)據(jù)返回給所述客戶端。
[0036]可選地,所述第一寫入模塊還適于:
[0037]調(diào)用第一線程,并利用所述第一線程將所述請(qǐng)求相應(yīng)的寫入操作記錄至所述本地日志并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述緩存層。
[0038]可選地,所述裝置還包括:
[0039]第二寫入模塊,適于調(diào)用第二線程并利用所述第二線程掃描所述本地日志以確定所述本地日志中是否存在日志增量,其中所述第二線程與所述第一線程異步;以及若發(fā)現(xiàn)所述本地日志中存在日志增量,則將所述日志增量相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)中。
[0040]可選地,所述第二寫入模塊還適于:
[0041 ]利用所述第二線程掃描所述本地日志,確定所述本地日志中是否存在未被標(biāo)記的日志記錄;以及
[0042]若是,則確定所述未被標(biāo)記的日志記錄為所述日志增量。
[0043]可選地,所述裝置還包括:
[0044]標(biāo)記模塊,適于在所述第二寫入模塊將所述日志增量相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)中之后,在所述本地日志中對(duì)所述日志增量相應(yīng)的日志記錄進(jìn)行標(biāo)記。
[0045]可選地,所述裝置還包括:
[0046]刪除模塊,適于刪除所述本地日志中已被標(biāo)記的日志記錄。
[0047]可選地,所述裝置還包括:
[0048]故障處理模塊,適于在所述數(shù)據(jù)庫(kù)出現(xiàn)故障重新啟動(dòng)后,掃描所述本地日志,確定所述本地日志中是否存在未被標(biāo)記的日志記錄;以及
[0049]若是,則將所述未被標(biāo)記的日志記錄相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù),并在所述本地日志中對(duì)所述未被標(biāo)記的日志記錄進(jìn)行標(biāo)記。
[0050]可選地,所述讀取模塊還適于:
[0051]當(dāng)所述請(qǐng)求分析模塊確定所述請(qǐng)求為數(shù)據(jù)的讀取請(qǐng)求時(shí),若在所述緩存層中未查找到所述請(qǐng)求相應(yīng)的數(shù)據(jù),則將所述請(qǐng)求轉(zhuǎn)發(fā)至所述數(shù)據(jù)庫(kù);以及
[0052]在所述數(shù)據(jù)庫(kù)中查找所述請(qǐng)求相應(yīng)的數(shù)據(jù),將查找到的所述請(qǐng)求相應(yīng)的數(shù)據(jù)返回給所述客戶端,并在所述緩存層中緩存所述請(qǐng)求相應(yīng)的數(shù)據(jù)。
[0053]可選地,所述緩存層為分布式的高速緩存系統(tǒng)memcached。
[0054]在本發(fā)明實(shí)施例中,當(dāng)接收到來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求時(shí),對(duì)該請(qǐng)求進(jìn)行類型分析以確定該請(qǐng)求是否為數(shù)據(jù)寫入請(qǐng)求。當(dāng)確定該請(qǐng)求為數(shù)據(jù)寫入請(qǐng)求時(shí),將該數(shù)據(jù)寫入請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將該數(shù)據(jù)寫入請(qǐng)求相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的緩存層。由此可知,本發(fā)明實(shí)施例直接將數(shù)據(jù)寫入請(qǐng)求相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的緩存層,并向客戶端返回響應(yīng)消息,其能夠提升后續(xù)對(duì)所述數(shù)據(jù)讀取的效率。并且,本發(fā)明實(shí)施例將數(shù)據(jù)寫入請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,從而可以利用本地日志異步地將寫入請(qǐng)求相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù),保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的持久化和完整性。另外,在數(shù)據(jù)庫(kù)出現(xiàn)故障重新啟動(dòng)后,也可以利用本地日志對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)恢復(fù),實(shí)現(xiàn)故障修復(fù)的目的。
[0055]上述說(shuō)明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說(shuō)明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的【具體實(shí)施方式】。
[0056]根據(jù)下文結(jié)合附圖對(duì)本發(fā)明具體實(shí)施例的詳細(xì)描述,本領(lǐng)域技術(shù)人員將會(huì)更加明了本發(fā)明的上述以及其他目的、優(yōu)點(diǎn)和特征。
【附圖說(shuō)明】
[0057]通過(guò)閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
[0058]圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的訪問(wèn)數(shù)據(jù)庫(kù)的方法的流程示意圖;
[0059]圖2示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的訪問(wèn)數(shù)據(jù)庫(kù)的方法的流程示意圖;
[0060]圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的訪問(wèn)數(shù)據(jù)庫(kù)的裝置的結(jié)構(gòu)示意圖;以及
[0061]圖4示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的訪問(wèn)數(shù)據(jù)庫(kù)的裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0062]下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0063]為解決上述技術(shù)問(wèn)題,本發(fā)明實(shí)施例提供了一種訪問(wèn)數(shù)據(jù)庫(kù)的方法。圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的訪問(wèn)數(shù)據(jù)庫(kù)的方法的流程示意圖。如圖1所示,該方法至少可以包括步驟S102、步驟S104以及步驟S106:
[0064]步驟S102,接收來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求;
[0065]步驟S104,對(duì)該請(qǐng)求進(jìn)行類型分析,以確定該請(qǐng)求是否為數(shù)據(jù)寫入請(qǐng)求;
[0066]步驟S106,當(dāng)該請(qǐng)求為數(shù)據(jù)寫入請(qǐng)求時(shí),將該請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將該請(qǐng)求相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的緩存層。
[0067]在該步驟中,本地日志是指數(shù)據(jù)庫(kù)在本地物理機(jī)上硬盤存儲(chǔ)的日志文件,它用來(lái)記錄數(shù)據(jù)庫(kù)被訪問(wèn)的操作。
[0068]在本發(fā)明實(shí)施例中,當(dāng)接收到來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求時(shí),對(duì)該請(qǐng)求進(jìn)行類型分析以確定該請(qǐng)求是否為數(shù)據(jù)寫入請(qǐng)求。當(dāng)確定該請(qǐng)求為數(shù)據(jù)寫入請(qǐng)求時(shí),將該數(shù)據(jù)寫入請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將該數(shù)據(jù)寫入請(qǐng)求相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的緩存層。由此可知,本發(fā)明實(shí)施例直接將數(shù)據(jù)寫入請(qǐng)求相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的緩存層,并向客戶端返回響應(yīng)消息,而無(wú)需將數(shù)據(jù)寫入數(shù)據(jù)庫(kù),能夠提高后續(xù)對(duì)所述數(shù)據(jù)讀取的效率。并且,本發(fā)明實(shí)施例將數(shù)據(jù)寫入請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,從而可以利用本地日志異步地將寫入請(qǐng)求相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù),保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的持久化和完整性。另夕卜,在數(shù)據(jù)庫(kù)出現(xiàn)故障重新啟動(dòng)后,也可以利用本地日志對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)恢復(fù),實(shí)現(xiàn)故障修復(fù)的目的。
[0069]在本發(fā)明的可選實(shí)施例中,為了提高數(shù)據(jù)庫(kù)訪問(wèn)的安全性,在上文步驟S102接收到來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求后,可以對(duì)該請(qǐng)求的合法性進(jìn)行驗(yàn)證,在驗(yàn)證通過(guò)后進(jìn)行后續(xù)的步驟S104以及步驟S106,若驗(yàn)證不通過(guò),則進(jìn)行攔截處理,并發(fā)出告警提示。這里的合法性是根據(jù)預(yù)先設(shè)置的安全認(rèn)證策略來(lái)度量的,安全認(rèn)證策略可以包括權(quán)限的合法性、請(qǐng)求的有效性或者攻擊檢查等,本發(fā)明不限于此。例如,安全認(rèn)證策略可以設(shè)置為根據(jù)哪個(gè)IP地址的客戶端對(duì)數(shù)據(jù)庫(kù)的查詢是不允許的;除了某個(gè)IP地址外的客戶端是不能刪除、修改數(shù)據(jù)庫(kù)中的數(shù)據(jù),等等策略。
[0070]在本發(fā)明的可選實(shí)施例中,在步驟S104對(duì)該請(qǐng)求進(jìn)行類型分析時(shí),可以從該請(qǐng)求中解析出訪問(wèn)數(shù)據(jù)庫(kù)的語(yǔ)句,分析該語(yǔ)句是哪種類型的操作,從而確定該請(qǐng)求是否為數(shù)據(jù)寫入請(qǐng)求。這里的類型如增加、刪除、修改、查詢等,當(dāng)語(yǔ)句為增加操作的語(yǔ)句時(shí),則確定該請(qǐng)求為數(shù)據(jù)寫入請(qǐng)求;當(dāng)語(yǔ)句為刪除操作的語(yǔ)句時(shí),則確定該請(qǐng)求為數(shù)據(jù)寫入請(qǐng)求;當(dāng)語(yǔ)句為修改操作的語(yǔ)句時(shí),則確定該請(qǐng)求為數(shù)據(jù)寫入請(qǐng)求;當(dāng)語(yǔ)句為查詢操作的語(yǔ)句時(shí),則確定該請(qǐng)求為數(shù)據(jù)讀取請(qǐng)求,等等。
[0071]在本發(fā)明的可選實(shí)施例中,上文步驟S106中提及的緩存層可以是在數(shù)據(jù)庫(kù)之外新建的緩存層。由于數(shù)據(jù)庫(kù)本身不具備緩存層,本發(fā)明實(shí)施例選擇在數(shù)據(jù)庫(kù)之外新建緩存層用于臨時(shí)存儲(chǔ)數(shù)據(jù)。例如,在將寫入請(qǐng)求相應(yīng)的寫入操作記錄至本地日志后,將寫入請(qǐng)求相應(yīng)的數(shù)據(jù)寫入新建的緩存層,并向客戶端返回響應(yīng)消息,從而提高后續(xù)對(duì)所述數(shù)據(jù)讀取的效率。這里,可以根據(jù)業(yè)務(wù)需求選取相應(yīng)存儲(chǔ)容量的緩存層,緩存層的類型可以如分布式的高速緩存系統(tǒng)memcached或者基于內(nèi)容存的redis等。
[0072]在本發(fā)明的可選實(shí)施例中,上文步驟S106將該請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將該請(qǐng)求相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的緩存層,本發(fā)明實(shí)施例提供了一種可選的方案,在該方案中,可以調(diào)用第一線程,并利用第一線程將請(qǐng)求相應(yīng)的寫入操作記錄至本地日志并將請(qǐng)求相應(yīng)的數(shù)據(jù)寫入緩存層。也就是說(shuō),由第一線程將請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,隨后將請(qǐng)求相應(yīng)的數(shù)據(jù)寫入緩存層,之后向客戶端返回表示已完成數(shù)據(jù)庫(kù)寫入的響應(yīng)消息。
[0073]進(jìn)一步地,為了保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的持久化和完整性,本發(fā)明實(shí)施例可以利用本地日志異步地將寫入請(qǐng)求相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù),即,調(diào)用第二線程并利用第二線程掃描本地日志以確定本地日志中是否存在日志增量,其中第二線程與第一線程異步,若發(fā)現(xiàn)本地日志中存在日志增量,則將日志增量相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中。這里,第二線程可以實(shí)時(shí)地對(duì)本地日志進(jìn)行掃描,也可以設(shè)定指定的掃描周期(如0.5秒或I秒等)對(duì)本地日志進(jìn)行掃描。
[0074]在本發(fā)明的可選實(shí)施例中,在確定日志增量時(shí),本發(fā)明實(shí)施例提供了一種可選的方案,即,利用第二線程掃描本地日志,確定本地日志中是否存在未被標(biāo)記的日志記錄,若存在未被標(biāo)記的日志記錄,則確定未被標(biāo)記的日志記錄為日志增量。進(jìn)一步地,將日志增量相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中之后,在本地日志中對(duì)日志增量相應(yīng)的日志記錄進(jìn)行標(biāo)記,以表示日志增量相應(yīng)的數(shù)據(jù)已寫入數(shù)據(jù)庫(kù)中,可以避免重復(fù)寫入的問(wèn)題。例如,將日志增量相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中之后,可以在本地日志中標(biāo)記日志增量相應(yīng)的日志記錄為“已操作”或“EL記錄”等。
[0075]在本發(fā)明的可選實(shí)施例中,為了節(jié)省本地存儲(chǔ)空間,可以刪除本地日志中已被標(biāo)記的日志記錄,例如,對(duì)本地日志進(jìn)行設(shè)置,每隔預(yù)定時(shí)間可以刪除已被標(biāo)記的日志記錄。另外,本地日志可以按照大小切分,當(dāng)某個(gè)切分區(qū)域中的日志記錄已全部被標(biāo)記,則可以刪除該切分區(qū)域中的日志記錄。
[0076]在本發(fā)明的可選實(shí)施例中,如果因?yàn)殄礄C(jī)或其他因素導(dǎo)致數(shù)據(jù)庫(kù)出現(xiàn)故障,使得新寫在緩存層中的數(shù)據(jù)還未在數(shù)據(jù)庫(kù)中持久化,則在下次重啟數(shù)據(jù)庫(kù)后,可以利用本地日志對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)恢復(fù),實(shí)現(xiàn)故障修復(fù)的目的。具體地,在數(shù)據(jù)庫(kù)出現(xiàn)故障重新啟動(dòng)后,啟用掃描線程,并利用掃描線程掃描本地日志,確定本地日志中是否存在未被標(biāo)記的日志記錄,若是,則將未被標(biāo)記的日志記錄相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù),并在本地日志中對(duì)未被標(biāo)記的日志記錄進(jìn)行標(biāo)記。例如,新寫在緩存層中的數(shù)據(jù)“b = 2”未在數(shù)據(jù)庫(kù)中持久化(“b = 2”相應(yīng)的寫入操作已記錄至本地日志),數(shù)據(jù)庫(kù)突發(fā)故障,在數(shù)據(jù)庫(kù)重新啟動(dòng)后,啟用掃描線程,并利用掃描線程掃描本地日志,發(fā)現(xiàn)本地日志中存在未被標(biāo)記的日志記錄,即“b = 2”相應(yīng)的寫入操作,則將“b = 2”寫入數(shù)據(jù)庫(kù),并在本地日志中對(duì)未被標(biāo)記的日志記錄(即“b = 2”相應(yīng)的寫入操作)進(jìn)行標(biāo)記,如標(biāo)記為“已操作”或“已記錄”等。
[0077]進(jìn)一步地,在數(shù)據(jù)恢復(fù)后數(shù)據(jù)庫(kù)正常工作,緩存層中也有新的數(shù)據(jù)寫入(這里,可以采用前文提及的第一線程將請(qǐng)求相應(yīng)的寫入操作記錄至本地日志并將請(qǐng)求相應(yīng)的數(shù)據(jù)寫入緩存層),此時(shí)可以繼續(xù)利用掃描線程掃描本地日志,以確定本地日志中是否存在日志增量,若發(fā)現(xiàn)本地日志中存在日志增量,則將日志增量相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中。這里的掃描線程與前文提及的第二線程作用相同,掃描線程與第一線程異步。
[0078]在本發(fā)明的可選實(shí)施例中,由于在緩存層對(duì)數(shù)據(jù)進(jìn)行了緩存,因而當(dāng)來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求為數(shù)據(jù)的讀取請(qǐng)求時(shí),則可以直接在緩存層中查找該讀取請(qǐng)求相應(yīng)的數(shù)據(jù),并將查找到的數(shù)據(jù)返回給客戶端,從而可以減少對(duì)數(shù)據(jù)庫(kù)的讀取訪問(wèn),提高數(shù)據(jù)讀取的效率。
[0079]在本發(fā)明的可選實(shí)施例中,如果數(shù)據(jù)庫(kù)故障或其他因素導(dǎo)致緩存層數(shù)據(jù)部分或全部丟失,使得在緩存層中未查找到讀取請(qǐng)求相應(yīng)的數(shù)據(jù),則本發(fā)明實(shí)施例可以將讀取請(qǐng)求轉(zhuǎn)發(fā)至數(shù)據(jù)庫(kù),在數(shù)據(jù)庫(kù)中查找讀取請(qǐng)求相應(yīng)的數(shù)據(jù),將查找到的讀取請(qǐng)求相應(yīng)的數(shù)據(jù)返回給客戶端,并在緩存層中緩存讀取請(qǐng)求相應(yīng)的數(shù)據(jù)。
[0080]下面將通過(guò)一具體實(shí)施例詳細(xì)介紹本發(fā)明的訪問(wèn)數(shù)據(jù)庫(kù)的方法的實(shí)現(xiàn)過(guò)程。在該實(shí)施例中,根據(jù)業(yè)務(wù)需求選取相應(yīng)存儲(chǔ)容量的緩存層,為數(shù)據(jù)庫(kù)新建緩存層,緩存層的類型可以如分布式的高速緩存系統(tǒng)memcached或者基于內(nèi)存的redis等。
[0081]圖2示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的訪問(wèn)數(shù)據(jù)庫(kù)的方法的流程示意圖。如圖2所示,該方法至少可以包括步驟S202、步驟S204、步驟S206、步驟S208以及步驟S210。
[0082]步驟S202,為數(shù)據(jù)庫(kù)新建緩存層,接收來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求。
[0083]步驟S204,對(duì)該請(qǐng)求進(jìn)行類型分析,確定該請(qǐng)求是否為數(shù)據(jù)寫入請(qǐng)求,若是,則繼續(xù)執(zhí)行步驟S206;若否,則繼續(xù)執(zhí)行步驟S208。
[0084]步驟S206,調(diào)用第一線程,并利用第一線程將請(qǐng)求相應(yīng)的寫入操作記錄至本地日志并將請(qǐng)求相應(yīng)的數(shù)據(jù)寫入緩存層。
[0085]在該步驟中,本地日志是指數(shù)據(jù)庫(kù)在本地物理機(jī)上硬盤存儲(chǔ)的日志文件,它用來(lái)記錄數(shù)據(jù)庫(kù)被訪問(wèn)的操作。
[0086]步驟S208,當(dāng)來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求為數(shù)據(jù)的讀取請(qǐng)求時(shí),在緩存層中查找該讀取請(qǐng)求相應(yīng)的數(shù)據(jù),并將查找到的數(shù)據(jù)返回給客戶端。
[0087]在該步驟中,如果數(shù)據(jù)庫(kù)故障或其他因素導(dǎo)致緩存層數(shù)據(jù)部分或全部丟失,使得在緩存層中未查找到讀取請(qǐng)求相應(yīng)的數(shù)據(jù),則本發(fā)明實(shí)施例可以將讀取請(qǐng)求轉(zhuǎn)發(fā)至數(shù)據(jù)庫(kù),在數(shù)據(jù)庫(kù)中查找讀取請(qǐng)求相應(yīng)的數(shù)據(jù),將查找到的讀取請(qǐng)求相應(yīng)的數(shù)據(jù)返回給客戶端,并在緩存層中緩存讀取請(qǐng)求相應(yīng)的數(shù)據(jù)。
[0088]步驟S210,調(diào)用第二線程并利用第二線程掃描本地日志以確定本地日志中是否存在日志增量,其中第二線程與第一線程異步,若發(fā)現(xiàn)本地日志中存在日志增量,則將日志增量相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中。
[0089]在確定日志增量時(shí),可以利用第二線程掃描本地日志,確定本地日志中是否存在未被標(biāo)記的日志記錄,若存在未被標(biāo)記的日志記錄,則確定未被標(biāo)記的日志記錄為日志增量。進(jìn)一步地,將日志增量相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中之后,在本地日志中對(duì)日志增量相應(yīng)的日志記錄進(jìn)行標(biāo)記,以表示日志增量相應(yīng)的數(shù)據(jù)已寫入數(shù)據(jù)庫(kù)中,可以避免重復(fù)寫入的問(wèn)題。例如,將日志增量相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中之后,可以在本地日志中標(biāo)記日志增量相應(yīng)的日志記錄為“已操作”或“已記錄”等。另外,為了節(jié)省本地存儲(chǔ)空間,可以刪除本地日志中已被標(biāo)記的日志記錄。
[0090]在本發(fā)明實(shí)施例中,如果因?yàn)殄礄C(jī)或其他因素導(dǎo)致數(shù)據(jù)庫(kù)出現(xiàn)故障,使得新寫在緩存層中的數(shù)據(jù)還未在數(shù)據(jù)庫(kù)中持久化,則在下次重啟數(shù)據(jù)庫(kù)后,可以利用本地日志對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)恢復(fù),實(shí)現(xiàn)故障修復(fù)的目的。具體地,在數(shù)據(jù)庫(kù)出現(xiàn)故障重新啟動(dòng)后,啟用掃描線程,并利用掃描線程掃描本地日志,確定本地日志中是否存在未被標(biāo)記的日志記錄,若是,則將未被標(biāo)記的日志記錄相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù),并在本地日志中對(duì)未被標(biāo)記的日志記錄進(jìn)行標(biāo)記。
[0091]進(jìn)一步地,在數(shù)據(jù)恢復(fù)后數(shù)據(jù)庫(kù)正常工作,緩存層中也有新的數(shù)據(jù)寫入(這里,可以采用前文提及的第一線程將請(qǐng)求相應(yīng)的寫入操作記錄至本地日志并將請(qǐng)求相應(yīng)的數(shù)據(jù)寫入緩存層),此時(shí)可以繼續(xù)利用掃描線程掃描本地日志,以確定本地日志中是否存在日志增量,若發(fā)現(xiàn)本地日志中存在日志增量,則將日志增量相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中。這里的掃描線程與前文提及的第二線程作用相同,掃描線程與第一線程異步。
[0092]需要說(shuō)明的是,在實(shí)際應(yīng)用中,上述所有可選實(shí)施方式可以采用結(jié)合的方式任意組合,形成本發(fā)明的可選實(shí)施例,在此不再一一贅述。
[0093]基于上文各個(gè)實(shí)施例提供的訪問(wèn)數(shù)據(jù)庫(kù)的方法,基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例還提供了一種訪問(wèn)數(shù)據(jù)庫(kù)的裝置。
[0094]圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的訪問(wèn)數(shù)據(jù)庫(kù)的裝置的結(jié)構(gòu)示意圖。如圖3所示,該裝置300至少可以包括請(qǐng)求接收模塊310、請(qǐng)求分析模塊320以及第一寫入模塊330。
[0095]現(xiàn)介紹本發(fā)明實(shí)施例的訪問(wèn)數(shù)據(jù)庫(kù)的裝置300的各組成或器件的功能以及各部分間的連接關(guān)系:
[0096]請(qǐng)求接收模塊310,適于接收來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求;
[0097]請(qǐng)求分析模塊320,與請(qǐng)求接收模塊310相親合,適于對(duì)請(qǐng)求進(jìn)行類型分析,以確定請(qǐng)求是否為數(shù)據(jù)寫入請(qǐng)求;以及
[0098]第一寫入模塊330,與請(qǐng)求分析模塊320相親合,適于當(dāng)請(qǐng)求分析模塊確定請(qǐng)求為數(shù)據(jù)的寫入請(qǐng)求時(shí),將請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將請(qǐng)求相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的緩存層。
[0099]在本發(fā)明一實(shí)施例中,如圖4所示,圖3展示的裝置還可以包括:
[0100]讀取模塊340,與請(qǐng)求分析模塊320、第一寫入模塊330相耦合,適于當(dāng)請(qǐng)求分析模塊320確定請(qǐng)求為數(shù)據(jù)的讀取請(qǐng)求時(shí),在緩存層中查找請(qǐng)求相應(yīng)的數(shù)據(jù),并將查找到的數(shù)據(jù)返回給客戶端。
[0101 ]在本發(fā)明一實(shí)施例中,第一寫入模塊330還適于:
[0102]調(diào)用第一線程,并利用第一線程將請(qǐng)求相應(yīng)的寫入操作記錄至本地日志并將請(qǐng)求相應(yīng)的數(shù)據(jù)寫入緩存層。
[0103]在本發(fā)明一實(shí)施例中,如圖4所示,圖3展示的裝置還可以包括:
[0104]第二寫入模塊350,與第一寫入模塊330相耦合,適于調(diào)用第二線程并利用第二線程掃描本地日志以確定本地日志中是否存在日志增量,其中第二線程與第一線程異步;以及若發(fā)現(xiàn)本地日志中存在日志增量,則將日志增量相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中。
[0105]在本發(fā)明一實(shí)施例中,第二寫入模塊350還適于:
[0106]利用第二線程掃描本地日志,確定本地日志中是否存在未被標(biāo)記的日志記錄;以及
[0107]若是,則確定未被標(biāo)記的日志記錄為日志增量。
[0108]在本發(fā)明一實(shí)施例中,如圖4所示,圖3展示的裝置還可以包括:
[0?09]標(biāo)記模塊360,與第二寫入模塊350相親合,適于在第二寫入模塊350將日志增量相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)中之后,在本地日志中對(duì)日志增量相應(yīng)的日志記錄進(jìn)行標(biāo)記。
[0110]在本發(fā)明一實(shí)施例中,如圖4所示,圖3展示的裝置還可以包括:
[0111]刪除模塊370,與標(biāo)記模塊360相耦合,適于刪除本地日志中已被標(biāo)記的日志記錄。
[0112]在本發(fā)明一實(shí)施例中,如圖4所示,圖3展示的裝置還可以包括:
[0113]故障處理模塊380,與第一寫入模塊330、標(biāo)記模塊360相耦合,適于在數(shù)據(jù)庫(kù)出現(xiàn)故障重新啟動(dòng)后,掃描本地日志,確定本地日志中是否存在未被標(biāo)記的日志記錄;以及
[0114]若是,則將未被標(biāo)記的日志記錄相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù),并在本地日志中對(duì)未被標(biāo)記的日志記錄進(jìn)行標(biāo)記。
[0115]在本發(fā)明一實(shí)施例中,讀取模塊340還適于:
[0116]當(dāng)請(qǐng)求分析模塊確定請(qǐng)求為數(shù)據(jù)的讀取請(qǐng)求時(shí),若在緩存層中未查找到請(qǐng)求相應(yīng)的數(shù)據(jù),則將請(qǐng)求轉(zhuǎn)發(fā)至數(shù)據(jù)庫(kù);
[0117]在數(shù)據(jù)庫(kù)中查找請(qǐng)求相應(yīng)的數(shù)據(jù),將查找到的請(qǐng)求相應(yīng)的數(shù)據(jù)返回給客戶端,并在緩存層中緩存請(qǐng)求相應(yīng)的數(shù)據(jù)。
[0118]在本發(fā)明一實(shí)施例中,緩存層為分布式的高速緩存系統(tǒng)memcached。
[0119]根據(jù)上述任意一個(gè)優(yōu)選實(shí)施例或多個(gè)優(yōu)選實(shí)施例的組合,本發(fā)明實(shí)施例能夠達(dá)到如下有益效果:
[0120]在本發(fā)明實(shí)施例中,當(dāng)接收到來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求時(shí),對(duì)該請(qǐng)求進(jìn)行類型分析以確定該請(qǐng)求是否為數(shù)據(jù)寫入請(qǐng)求。當(dāng)確定該請(qǐng)求為數(shù)據(jù)寫入請(qǐng)求時(shí),將該數(shù)據(jù)寫入請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將該數(shù)據(jù)寫入請(qǐng)求相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的緩存層。由此可知,本發(fā)明實(shí)施例直接將數(shù)據(jù)寫入請(qǐng)求相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù)的緩存層,并向客戶端返回響應(yīng)消息,其能夠提高后續(xù)對(duì)所述數(shù)據(jù)讀取的效率。并且,本發(fā)明實(shí)施例將數(shù)據(jù)寫入請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,從而可以利用本地日志異步地將寫入請(qǐng)求相應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)庫(kù),保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的持久化和完整性。另外,在數(shù)據(jù)庫(kù)出現(xiàn)故障重新啟動(dòng)后,也可以利用本地日志對(duì)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)恢復(fù),實(shí)現(xiàn)故障修復(fù)的目的。
[0121]在此處所提供的說(shuō)明書中,說(shuō)明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒(méi)有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說(shuō)明書的理解。
[0122]類似地,應(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)利要求中所明確記載的特征更多的特征。更確切地說(shuō),如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循【具體實(shí)施方式】的權(quán)利要求書由此明確地并入該【具體實(shí)施方式】,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
[0123]本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過(guò)程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說(shuō)明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過(guò)程或單元進(jìn)行組合。除非另外明確陳述,本說(shuō)明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來(lái)代替。
[0124]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來(lái)使用。
[0125]本發(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)來(lái)實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的訪問(wèn)數(shù)據(jù)庫(kù)的裝置中的一些或者全部部件的一些或者全部功能。本發(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)上提供,或者以任何其他形式提供。
[0126]應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說(shuō)明而不是對(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ī)來(lái)實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過(guò)同一個(gè)硬件項(xiàng)來(lái)具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
[0127]至此,本領(lǐng)域技術(shù)人員應(yīng)認(rèn)識(shí)到,雖然本文已詳盡示出和描述了本發(fā)明的多個(gè)示例性實(shí)施例,但是,在不脫離本發(fā)明精神和范圍的情況下,仍可根據(jù)本發(fā)明公開的內(nèi)容直接確定或推導(dǎo)出符合本發(fā)明原理的許多其他變型或修改。因此,本發(fā)明的范圍應(yīng)被理解和認(rèn)定為覆蓋了所有這些其他變型或修改。
[0128]本發(fā)明實(shí)施例的一方面公開了Al、一種訪問(wèn)數(shù)據(jù)庫(kù)的方法,包括:
[0129]接收來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求;
[0130]對(duì)所述請(qǐng)求進(jìn)行類型分析,以確定所述請(qǐng)求是否為數(shù)據(jù)寫入請(qǐng)求;以及
[0131 ]當(dāng)所述請(qǐng)求為數(shù)據(jù)寫入請(qǐng)求時(shí),將所述請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)的緩存層。
[0132]A2、根據(jù)Al所述的方法,其中,還包括:
[0133]當(dāng)所述請(qǐng)求為數(shù)據(jù)的讀取請(qǐng)求時(shí),在所述緩存層中查找所述請(qǐng)求相應(yīng)的數(shù)據(jù),并將查找到的所述數(shù)據(jù)返回給所述客戶端。
[0134]A3、根據(jù)Al或A2所述的方法,其中,所述將所述請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)的緩存層的步驟進(jìn)一步包括:
[0135]調(diào)用第一線程,并利用所述第一線程將所述請(qǐng)求相應(yīng)的寫入操作記錄至所述本地日志并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述緩存層。
[0136]A4、根據(jù)A1-A3中任一項(xiàng)所述的方法,其中,還包括:
[0137]調(diào)用第二線程并利用所述第二線程掃描所述本地日志以確定所述本地日志中是否存在日志增量,其中所述第二線程與所述第一線程異步;以及
[0138]若發(fā)現(xiàn)所述本地日志中存在日志增量,則將所述日志增量相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)中。
[0139]A5、根據(jù)A1-A4中任一項(xiàng)所述的方法,其中,所述利用所述第二線程掃描所述本地日志以確定所述本地日志中是否存在日志增量的步驟進(jìn)一步包括:
[0140]利用所述第二線程掃描所述本地日志,確定所述本地日志中是否存在未被標(biāo)記的日志記錄;以及
[0141 ]若是,則確定所述未被標(biāo)記的日志記錄為所述日志增量。
[0142]A6、根據(jù)A1-A5中任一項(xiàng)所述的方法,其中,所述將所述日志增量相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)中之后,所述方法還包括:
[0143]在所述本地日志中對(duì)所述日志增量相應(yīng)的日志記錄進(jìn)行標(biāo)記。
[0144]A7、根據(jù)A1-A6中任一項(xiàng)所述的方法,其中,還包括:
[0145]刪除所述本地日志中已被標(biāo)記的日志記錄。
[0146]A8、根據(jù)A1-A7中任一項(xiàng)所述的方法,其中,還包括:
[0147]在所述數(shù)據(jù)庫(kù)出現(xiàn)故障重新啟動(dòng)后,掃描所述本地日志,確定所述本地日志中是否存在未被標(biāo)記的日志記錄;以及
[0148]若是,則將所述未被標(biāo)記的日志記錄相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù),并在所述本地日志中對(duì)所述未被標(biāo)記的日志記錄進(jìn)行標(biāo)記。
[0149]A9、根據(jù)A1-A8中任一項(xiàng)所述的方法,其中,還包括:
[0150]當(dāng)所述請(qǐng)求為數(shù)據(jù)的讀取請(qǐng)求時(shí),若在所述緩存層中未查找到所述請(qǐng)求相應(yīng)的數(shù)據(jù),則將所述請(qǐng)求轉(zhuǎn)發(fā)至所述數(shù)據(jù)庫(kù);以及
[0151]在所述數(shù)據(jù)庫(kù)中查找所述請(qǐng)求相應(yīng)的數(shù)據(jù),將查找到的所述請(qǐng)求相應(yīng)的數(shù)據(jù)返回給所述客戶端,并在所述緩存層中緩存所述請(qǐng)求相應(yīng)的數(shù)據(jù)。
[0152]A10、根據(jù)A1-A9中任一項(xiàng)所述的方法,其中,所述緩存層為分布式的高速緩存系統(tǒng)memcachedο
[0153]本發(fā)明實(shí)施例的另一方面還公開了B11、一種訪問(wèn)數(shù)據(jù)庫(kù)的裝置,包括:
[0154]請(qǐng)求接收模塊,適于接收來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求;
[0155]請(qǐng)求分析模塊,適于對(duì)所述請(qǐng)求進(jìn)行類型分析,以確定所述請(qǐng)求是否為數(shù)據(jù)寫入請(qǐng)求;以及
[0156]第一寫入模塊,適于當(dāng)所述請(qǐng)求分析模塊確定所述請(qǐng)求為數(shù)據(jù)的寫入請(qǐng)求時(shí),將所述請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)的緩存層。
[0157]B12、根據(jù)Bll所述的裝置,其中,還包括:
[0158]讀取模塊,適于當(dāng)所述請(qǐng)求分析模塊確定所述請(qǐng)求為數(shù)據(jù)的讀取請(qǐng)求時(shí),在所述緩存層中查找所述請(qǐng)求相應(yīng)的數(shù)據(jù),并將查找到的所述數(shù)據(jù)返回給所述客戶端。
[0159]B13、根據(jù)Bll或B12所述的裝置,其中,所述第一寫入模塊還適于:
[0160]調(diào)用第一線程,并利用所述第一線程將所述請(qǐng)求相應(yīng)的寫入操作記錄至所述本地日志并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述緩存層。
[0161]B14、根據(jù)B11-B13中任一項(xiàng)所述的裝置,其中,還包括:
[0162]第二寫入模塊,適于調(diào)用第二線程并利用所述第二線程掃描所述本地日志以確定所述本地日志中是否存在日志增量,其中所述第二線程與所述第一線程異步;以及若發(fā)現(xiàn)所述本地日志中存在日志增量,則將所述日志增量相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)中。
[0163]B15、根據(jù)B11-B14中任一項(xiàng)所述的裝置,其中,所述第二寫入模塊還適于:
[0164]利用所述第二線程掃描所述本地日志,確定所述本地日志中是否存在未被標(biāo)記的日志記錄;以及
[0165]若是,則確定所述未被標(biāo)記的日志記錄為所述日志增量。
[0166]B16、根據(jù)B11-B15中任一項(xiàng)所述的裝置,其中,還包括:
[0167]標(biāo)記模塊,適于在所述第二寫入模塊將所述日志增量相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)中之后,在所述本地日志中對(duì)所述日志增量相應(yīng)的日志記錄進(jìn)行標(biāo)記。
[0168]B17、根據(jù)B11-B16中任一項(xiàng)所述的裝置,其中,還包括:
[0169]刪除模塊,適于刪除所述本地日志中已被標(biāo)記的日志記錄。
[0170]B18、根據(jù)B11-B17中任一項(xiàng)所述的裝置,其中,還包括:
[0171]故障處理模塊,適于在所述數(shù)據(jù)庫(kù)出現(xiàn)故障重新啟動(dòng)后,掃描所述本地日志,確定所述本地日志中是否存在未被標(biāo)記的日志記錄;以及
[0172]若是,則將所述未被標(biāo)記的日志記錄相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù),并在所述本地日志中對(duì)所述未被標(biāo)記的日志記錄進(jìn)行標(biāo)記。
[0173]B19、根據(jù)B11-B18中任一項(xiàng)所述的裝置,其中,所述讀取模塊還適于:
[0174]當(dāng)所述請(qǐng)求分析模塊確定所述請(qǐng)求為數(shù)據(jù)的讀取請(qǐng)求時(shí),若在所述緩存層中未查找到所述請(qǐng)求相應(yīng)的數(shù)據(jù),則將所述請(qǐng)求轉(zhuǎn)發(fā)至所述數(shù)據(jù)庫(kù);以及
[0175]在所述數(shù)據(jù)庫(kù)中查找所述請(qǐng)求相應(yīng)的數(shù)據(jù),將查找到的所述請(qǐng)求相應(yīng)的數(shù)據(jù)返回給所述客戶端,并在所述緩存層中緩存所述請(qǐng)求相應(yīng)的數(shù)據(jù)。
[0176]B20、根據(jù)B11-B19中任一項(xiàng)所述的裝置,其中,所述緩存層為分布式的高速緩存系統(tǒng)memcachedο
【主權(quán)項(xiàng)】
1.一種訪問(wèn)數(shù)據(jù)庫(kù)的方法,包括: 接收來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求; 對(duì)所述請(qǐng)求進(jìn)行類型分析,以確定所述請(qǐng)求是否為數(shù)據(jù)寫入請(qǐng)求;以及 當(dāng)所述請(qǐng)求為數(shù)據(jù)寫入請(qǐng)求時(shí),將所述請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)的緩存層。2.根據(jù)權(quán)利要求1所述的方法,其中,還包括: 當(dāng)所述請(qǐng)求為數(shù)據(jù)的讀取請(qǐng)求時(shí),在所述緩存層中查找所述請(qǐng)求相應(yīng)的數(shù)據(jù),并將查找到的所述數(shù)據(jù)返回給所述客戶端。3.根據(jù)權(quán)利要求1或2所述的方法,其中,所述將所述請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)的緩存層的步驟進(jìn)一步包括: 調(diào)用第一線程,并利用所述第一線程將所述請(qǐng)求相應(yīng)的寫入操作記錄至所述本地日志并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述緩存層。4.根據(jù)權(quán)利要求1-3中任一項(xiàng)所述的方法,其中,還包括: 調(diào)用第二線程并利用所述第二線程掃描所述本地日志以確定所述本地日志中是否存在日志增量,其中所述第二線程與所述第一線程異步;以及 若發(fā)現(xiàn)所述本地日志中存在日志增量,則將所述日志增量相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)中。5.根據(jù)權(quán)利要求1-4中任一項(xiàng)所述的方法,其中,所述利用所述第二線程掃描所述本地日志以確定所述本地日志中是否存在日志增量的步驟進(jìn)一步包括: 利用所述第二線程掃描所述本地日志,確定所述本地日志中是否存在未被標(biāo)記的日志記錄;以及 若是,則確定所述未被標(biāo)記的日志記錄為所述日志增量。6.根據(jù)權(quán)利要求1-5中任一項(xiàng)所述的方法,其中,所述將所述日志增量相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)中之后,所述方法還包括: 在所述本地日志中對(duì)所述日志增量相應(yīng)的日志記錄進(jìn)行標(biāo)記。7.根據(jù)權(quán)利要求1-6中任一項(xiàng)所述的方法,其中,還包括: 刪除所述本地日志中已被標(biāo)記的日志記錄。8.根據(jù)權(quán)利要求1-7中任一項(xiàng)所述的方法,其中,還包括: 在所述數(shù)據(jù)庫(kù)出現(xiàn)故障重新啟動(dòng)后,掃描所述本地日志,確定所述本地日志中是否存在未被標(biāo)記的日志記錄;以及 若是,則將所述未被標(biāo)記的日志記錄相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù),并在所述本地日志中對(duì)所述未被標(biāo)記的日志記錄進(jìn)行標(biāo)記。9.根據(jù)權(quán)利要求1-8中任一項(xiàng)所述的方法,其中,還包括: 當(dāng)所述請(qǐng)求為數(shù)據(jù)的讀取請(qǐng)求時(shí),若在所述緩存層中未查找到所述請(qǐng)求相應(yīng)的數(shù)據(jù),則將所述請(qǐng)求轉(zhuǎn)發(fā)至所述數(shù)據(jù)庫(kù);以及 在所述數(shù)據(jù)庫(kù)中查找所述請(qǐng)求相應(yīng)的數(shù)據(jù),將查找到的所述請(qǐng)求相應(yīng)的數(shù)據(jù)返回給所述客戶端,并在所述緩存層中緩存所述請(qǐng)求相應(yīng)的數(shù)據(jù)。10.—種訪問(wèn)數(shù)據(jù)庫(kù)的裝置,包括: 請(qǐng)求接收模塊,適于接收來(lái)自客戶端的訪問(wèn)數(shù)據(jù)庫(kù)的請(qǐng)求; 請(qǐng)求分析模塊,適于對(duì)所述請(qǐng)求進(jìn)行類型分析,以確定所述請(qǐng)求是否為數(shù)據(jù)寫入請(qǐng)求;以及 第一寫入模塊,適于當(dāng)所述請(qǐng)求分析模塊確定所述請(qǐng)求為數(shù)據(jù)的寫入請(qǐng)求時(shí),將所述請(qǐng)求相應(yīng)的寫入操作記錄至本地日志,并將所述請(qǐng)求相應(yīng)的數(shù)據(jù)寫入所述數(shù)據(jù)庫(kù)的緩存層。
【文檔編號(hào)】G06F17/30GK106021335SQ201610299223
【公開日】2016年10月12日
【申請(qǐng)日】2016年5月6日
【發(fā)明人】宋昭
【申請(qǐng)人】北京奇虎科技有限公司, 奇智軟件(北京)有限公司