,MySQL主數(shù)據(jù)庫和MySQL備數(shù)據(jù)庫之間雙向同步業(yè)務(wù)數(shù)據(jù),SSDB主數(shù)據(jù)庫和SSDB備數(shù)據(jù)庫之間雙向同步業(yè)務(wù)數(shù)據(jù)。
[0027]MySQL是一種關(guān)聯(lián)數(shù)據(jù)庫管理系統(tǒng),關(guān)聯(lián)數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi),這樣就增加了速度并提高了靈活性。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網(wǎng)站的開發(fā)都選擇MySQL作為網(wǎng)站數(shù)據(jù)庫。由于性能卓越,搭配PHP和Apache可組成良好的開發(fā)環(huán)境。但是,MySQL仍屬于傳統(tǒng)的關(guān)系數(shù)據(jù)庫,在應(yīng)付超大規(guī)模和高并發(fā)的網(wǎng)站系統(tǒng)已經(jīng)顯得力不從心,暴露了很多難以克服的問題。
[0028]SSDB是一個高性能的支持豐富數(shù)據(jù)結(jié)構(gòu)的NoSQL數(shù)據(jù)庫,它的訪問速度更快,自帶數(shù)據(jù)壓縮功能,占用存儲空間小。但目前SSDB的Windows版本在多線程環(huán)境下還不穩(wěn)定,經(jīng)常出現(xiàn)超時的問題。
[0029]本發(fā)明綜合MySQL和SSDB的優(yōu)缺點,在主數(shù)據(jù)庫和備數(shù)據(jù)庫中分別部署了對應(yīng)的MySQL數(shù)據(jù)庫和SSDB數(shù)據(jù)庫。采用SSDB+MYSQL進行數(shù)據(jù)庫保存工作,其中將查詢關(guān)系保存到MySQL數(shù)據(jù)庫中,而將數(shù)據(jù)存儲到SSDB數(shù)據(jù)庫進行持久化存儲。
[0030]具體來說,主機房的業(yè)務(wù)服務(wù)器在接收到業(yè)務(wù)數(shù)據(jù)讀請求時,優(yōu)先從主緩存數(shù)據(jù)庫中查詢業(yè)務(wù)數(shù)據(jù),若查詢到,則讀??;若未查詢到,則從MySQL主數(shù)據(jù)庫和SSDB主數(shù)據(jù)庫中查詢并讀取業(yè)務(wù)數(shù)據(jù)。主機房的業(yè)務(wù)服務(wù)器在接收到業(yè)務(wù)數(shù)據(jù)寫請求時,先向MySQL主數(shù)據(jù)庫和SSDB主數(shù)據(jù)庫中寫入業(yè)務(wù)數(shù)據(jù),而后向主緩存數(shù)據(jù)庫寫入業(yè)務(wù)數(shù)據(jù)。主機房的主緩存數(shù)據(jù)庫只存儲短期內(nèi)的數(shù)據(jù),超出一定時間范圍內(nèi)的數(shù)據(jù)定時清除;而MySQL主數(shù)據(jù)庫和SSDB主數(shù)據(jù)庫對數(shù)據(jù)進行持久化存儲。
[0031]備機房的業(yè)務(wù)服務(wù)器在接收到業(yè)務(wù)數(shù)據(jù)讀請求時,優(yōu)先從備緩存數(shù)據(jù)庫中查詢業(yè)務(wù)數(shù)據(jù),若查詢到,則讀?。蝗粑床樵兊剑瑒t從MySQL主數(shù)據(jù)庫和SSDB主數(shù)據(jù)庫中查詢并讀取業(yè)務(wù)數(shù)據(jù)。備機房的業(yè)務(wù)服務(wù)器在接收到業(yè)務(wù)寫請求時,先向MySQL主數(shù)據(jù)庫和SSDB主數(shù)據(jù)庫中寫入業(yè)務(wù)數(shù)據(jù),而后向備緩存數(shù)據(jù)庫中寫入業(yè)務(wù)數(shù)據(jù)。備機房的備緩存數(shù)據(jù)庫只存儲短期內(nèi)的數(shù)據(jù),超出一定時間范圍內(nèi)的數(shù)據(jù)定時清除;而MySQL主數(shù)據(jù)庫和SSDB主數(shù)據(jù)庫對數(shù)據(jù)進行持久化存儲。
[0032]MySQL主數(shù)據(jù)庫和MySQL備數(shù)據(jù)庫之間雙向同步業(yè)務(wù)數(shù)據(jù),SSDB主數(shù)據(jù)庫和SSDB備數(shù)據(jù)庫之間雙向同步業(yè)務(wù)數(shù)據(jù),保證MySQL主數(shù)據(jù)庫和MySQL備數(shù)據(jù)庫之間、SSDB主數(shù)據(jù)庫和SSDB備數(shù)據(jù)庫存儲數(shù)據(jù)的強一致性。
[0033]進一步的,本實施例中主緩存數(shù)據(jù)庫和備緩存數(shù)據(jù)庫可以均為SSDB緩存數(shù)據(jù)庫,SSDB做緩存時,讀取速度遠遠高于其它類型的緩存,也可以解決MySQL數(shù)據(jù)庫負載過高的問題,進一步的提高了系統(tǒng)的處理性能。
[0034]下面以用戶注冊請求和用戶登錄請求為例來進一步說明本系統(tǒng)的數(shù)據(jù)處理過程。用戶注冊請求可理解為業(yè)務(wù)數(shù)據(jù)寫請求的一種類型,在接收到用戶注冊請求后,根據(jù)用戶注冊信息確定允許登錄,則將用戶注冊信息寫入緩存和數(shù)據(jù)庫中。用戶登錄請求可理解為業(yè)務(wù)數(shù)據(jù)讀請求的一種類型,在接收到用戶登錄請求后,查詢緩存和數(shù)據(jù)庫中是否存儲有用戶注冊信息,若是,則讀取用戶注冊信息判定用戶登錄成功;否則,用戶登錄失敗。
[0035]主機房的業(yè)務(wù)服務(wù)器首先接收到用戶A的用戶注冊請求,在確定允許登錄后,主機房的業(yè)務(wù)服務(wù)器將用戶注冊信息寫入主緩存數(shù)據(jù)庫、MySQL主數(shù)據(jù)庫和SSDB主數(shù)據(jù)庫中。在用戶A注冊成功后,如果用戶A向備機房發(fā)起用戶登錄請求,備機房的業(yè)務(wù)服務(wù)器接收到用戶A的用戶登錄請求后,首先在備緩存數(shù)據(jù)庫中查詢用戶注冊信息。如果備緩存數(shù)據(jù)庫通過雙向同步從主緩存數(shù)據(jù)庫中獲得了用戶A的用戶注冊信息,則從備緩存數(shù)據(jù)庫中可以讀取到該用戶注冊信息,依此判定用戶登錄成功。如果備緩存數(shù)據(jù)庫中沒有查詢到用戶A的用戶注冊信息,則備機房的業(yè)務(wù)服務(wù)器從MySQL主數(shù)據(jù)庫和SSDB主數(shù)據(jù)庫中查詢并讀取用戶注冊信息。
[0036]由此可見,主備機房的業(yè)務(wù)服務(wù)器在MySQL主數(shù)據(jù)庫和SSDB主數(shù)據(jù)庫寫數(shù)據(jù),也在MySQL主數(shù)據(jù)庫和SSDB主數(shù)據(jù)庫讀數(shù)據(jù),使得業(yè)務(wù)數(shù)據(jù)的更新主要發(fā)生的MySQL主數(shù)據(jù)庫和SSDB主數(shù)據(jù)庫。在主備數(shù)據(jù)庫之間雙向同步業(yè)務(wù)數(shù)據(jù)時,以MySQL主數(shù)據(jù)庫和SSDB主數(shù)據(jù)庫的業(yè)務(wù)數(shù)據(jù)為主,使得主備數(shù)據(jù)庫的數(shù)據(jù)能夠保持強一致性。而且,這種方式也提高了主數(shù)據(jù)庫和備數(shù)據(jù)庫之間同步數(shù)據(jù)的便捷性,避免了主數(shù)據(jù)庫和備數(shù)據(jù)庫的業(yè)務(wù)數(shù)據(jù)同時發(fā)生不同程度的更新而造成的數(shù)據(jù)同步困難的問題,降低了主備同步的難度。
[0037]另外,主緩存數(shù)據(jù)庫和備緩存數(shù)據(jù)庫之間雙向同步業(yè)務(wù)數(shù)據(jù)。當(dāng)某些業(yè)務(wù)數(shù)據(jù)通過主機房的業(yè)務(wù)服務(wù)器寫入主緩存數(shù)據(jù)庫時,在一定時間內(nèi),用戶向備機房的業(yè)務(wù)服務(wù)器發(fā)起業(yè)務(wù)數(shù)據(jù)讀請求,備機房的業(yè)務(wù)服務(wù)器可以從備緩存數(shù)據(jù)庫中查詢到這些業(yè)務(wù)數(shù)據(jù),提升了業(yè)務(wù)數(shù)據(jù)的讀取速度。
[0038]進一步的,本發(fā)明中MySQL主數(shù)據(jù)庫和MySQL備數(shù)據(jù)庫都采用分表技術(shù)存儲業(yè)務(wù)數(shù)據(jù),即將數(shù)據(jù)庫維護有多張數(shù)據(jù)表,用于分別存儲業(yè)務(wù)數(shù)據(jù)。在主機房和備機房的業(yè)務(wù)服務(wù)器從MySQL主數(shù)據(jù)庫中查詢業(yè)務(wù)數(shù)據(jù)時,并發(fā)地從多個數(shù)據(jù)表查詢,提升了數(shù)據(jù)查詢的效率。尤其是在高并發(fā)的場景下,采用MySQL分表技術(shù)與緩存查詢相結(jié)合,能大大提升數(shù)據(jù)讀寫速度,使主機房能有效應(yīng)對。
[0039]對于用戶注冊場景,本發(fā)明的主備機房提供了不同的用戶賬號生成規(guī)則。具體的,主機房的至少一個業(yè)務(wù)服務(wù)器用于:在接收到用戶注冊請求時,為用戶生成符合第一規(guī)則的用戶賬號,將用戶賬號和用戶注冊信息寫入主緩存數(shù)據(jù)庫和主數(shù)據(jù)庫中。備機房的至少一個業(yè)務(wù)服務(wù)器用于:在接收到用戶注冊請求時,為用戶生成符合第二規(guī)則的用戶賬號,將用戶賬號和用戶注冊信息寫入備緩存數(shù)據(jù)庫和主數(shù)據(jù)庫中;其中第一規(guī)則不同于第二規(guī)則。
[0040]以一個備機房為例,主機房的業(yè)務(wù)服務(wù)器在接收到用戶注冊請求時,生成偶數(shù)的用戶賬號,而備機房的業(yè)務(wù)服務(wù)器在接收到用戶注冊請求時,生成奇數(shù)的用戶賬號。主備機房的用戶賬號采用不同的生成規(guī)則來生成,避免了若用戶賬號生成器的初始值相差不大,導(dǎo)致主備機房生成的用戶賬號可能出現(xiàn)重復(fù),后續(xù)主備機房的緩存和數(shù)據(jù)庫進行同步時,會出現(xiàn)錯誤導(dǎo)致同步失敗。
[0041]上述奇偶區(qū)分僅為一示例,當(dāng)備機房為多個時,可以為各個機房配置不同的用戶賬號生成規(guī)則,用以對不同機房的用戶賬號進行區(qū)分。
[0042]進一步的,本發(fā)明中主數(shù)據(jù)庫中可存儲有系統(tǒng)賬號打通表,在圖2對應(yīng)的實施例中,系統(tǒng)賬號打通表可選地存儲在SSDB主數(shù)據(jù)庫中。系統(tǒng)賬號打通表內(nèi)記錄有系統(tǒng)的用戶賬號和與系統(tǒng)關(guān)聯(lián)的其它系統(tǒng)的用戶賬號。
[0043]主機房的至少一個業(yè)務(wù)服務(wù)器和/或備機房的至少一個業(yè)務(wù)服務(wù)器還用于:在接收到業(yè)務(wù)數(shù)據(jù)讀請求或業(yè)務(wù)數(shù)據(jù)寫請求時,查詢系統(tǒng)賬號打通表,根據(jù)系統(tǒng)賬號打通表內(nèi)是否記錄業(yè)務(wù)數(shù)據(jù)讀請求或業(yè)務(wù)數(shù)據(jù)寫請求攜帶的用戶賬號來確定是否提供業(yè)務(wù)數(shù)據(jù)讀寫服務(wù)。也就是說,本發(fā)明的多機房部署系統(tǒng)不僅支持本系統(tǒng)內(nèi)注冊用戶的數(shù)據(jù)訪問服務(wù),還支持與本系統(tǒng)關(guān)聯(lián)的其它系統(tǒng)注冊用戶的數(shù)據(jù)訪問服務(wù)。通過以系統(tǒng)賬號打通表的形式記錄用戶賬號,可以更方便的拓展本系統(tǒng)的用戶數(shù)量,用更簡便的方式將關(guān)聯(lián)的其它系統(tǒng)的用戶吸收進來。
[0044]在以上各個實施例中,以備機房為一個舉例說明,但在實際中,也可部署多個備機房。多個備機房的業(yè)務(wù)服務(wù)器都向主機房的主數(shù)據(jù)庫讀寫數(shù)據(jù),多個備機房的緩存數(shù)據(jù)庫和主數(shù)據(jù)庫與主機房的緩存數(shù)據(jù)庫和主數(shù)據(jù)庫之間數(shù)據(jù)同步保持一致。
[0045]根據(jù)本實施例提供的多機房部署系統(tǒng),主備機房都部署有各自的緩存數(shù)據(jù)庫和數(shù)據(jù)庫,主備機房的緩存數(shù)據(jù)庫之間雙向同步業(yè)務(wù)數(shù)據(jù),數(shù)據(jù)庫之間也雙向同步業(yè)務(wù)數(shù)據(jù)。當(dāng)備機房的業(yè)務(wù)服務(wù)器接收到業(yè)務(wù)數(shù)據(jù)讀請求時,從主機房的主數(shù)據(jù)庫讀取業(yè)務(wù)數(shù)據(jù),當(dāng)備機房的業(yè)務(wù)服務(wù)器接收到業(yè)務(wù)數(shù)據(jù)寫請求時,向主機房的主數(shù)據(jù)庫寫入業(yè)務(wù)數(shù)據(jù)。該系統(tǒng)中,業(yè)務(wù)數(shù)據(jù)的更新主要發(fā)生在主數(shù)據(jù)庫,在主數(shù)據(jù)庫和備數(shù)據(jù)庫之間雙向同步業(yè)務(wù)數(shù)據(jù)時,以主數(shù)據(jù)庫的業(yè)務(wù)數(shù)據(jù)為主,使得備數(shù)據(jù)庫與主數(shù)據(jù)庫的數(shù)據(jù)能夠保持強一致性。而且,這種部署方式也提高了主數(shù)據(jù)庫和備數(shù)據(jù)庫之間同步數(shù)據(jù)的便捷性,避免了主數(shù)據(jù)庫和備數(shù)據(jù)的業(yè)務(wù)數(shù)據(jù)同時發(fā)生不同程度的更新而造成的數(shù)據(jù)同步困難的問題,降低了主備同步的難度。進一步的,主機房和備機房都分別部署了 MySQL數(shù)據(jù)庫和SSDB數(shù)據(jù)庫,采用SSDB+MYSQL進行數(shù)據(jù)庫保存工作,集合了 MySQL和SSDB的數(shù)據(jù)存儲優(yōu)勢。而且,緩存數(shù)據(jù)庫也采用SSDB緩存,讀取速度遠遠高于其它類型的緩存,進一步的提高了系統(tǒng)的處理性能。本實施例的系統(tǒng)中還可采用MySQL分表技術(shù)與緩存查詢相結(jié)合,大大提升數(shù)據(jù)讀寫速度,使得系統(tǒng)能有效應(yīng)對高并發(fā)場景。
[0046]圖3示出了根據(jù)本發(fā)明一個實施例的跨機房的業(yè)務(wù)數(shù)據(jù)處理方法的流程圖。如圖3所示,該方法包括如下步驟:
[0047]步驟S301,主機房的主緩存數(shù)據(jù)庫和備機房的備緩存數(shù)據(jù)庫之間雙向同步業(yè)務(wù)數(shù)據(jù),主機房的主數(shù)據(jù)庫與備機房的備數(shù)據(jù)庫之間雙向同步業(yè)務(wù)數(shù)據(jù)。
[0048]步驟S302,當(dāng)備機房的業(yè)務(wù)服務(wù)器接收到業(yè)務(wù)數(shù)據(jù)讀請求時,從主數(shù)據(jù)庫中讀取業(yè)務(wù)數(shù)