一種數據庫的實現方法和設備的制造方法
【技術領域】
[0001]本發明的實施方式涉及數據庫技術領域,更具體地,本發明的實施方式涉及一種數據庫的實現方法和設備。
【背景技術】
[0002]本部分旨在為權利要求書中陳述的本發明的實施方式提供背景或上下文。此處的描述不因為包括在本部分中就承認是現有技術。
[0003]許多應用系統在為用戶提供服務時,其功能需要通過對數據庫進行查詢、更新等數據操作來實現。對于一些應用系統來說,隨著用戶數量的急劇增長以及各用戶對應用系統提供的各種服務越來越頻繁地使用,數據庫中增加數據、刪除數據、更改數據及查詢數據等數據操作的開銷越來越大,這使得單一數據庫的性能難以滿足這樣巨大的數據操作開銷。因此,為了提高應用系統的性能而滿足大量用戶對大量服務的使用需求,需要將應用系統的單一數據庫進行分庫分表(sharding),使得應用系統涉及的數據分配到多個數據庫中記錄,從而使得應用系統承擔的大量數據操作能夠分攤到多個數據庫執行,減小每個數據庫的數據操作開銷。
[0004]目前,已經出現了一些對數據庫進行分庫分表的實現方式。例如,一種現有的數據庫分庫分表方式是散列方式(即hash算法),具體地,對于應用系統來說,對當前可用于記錄數據的多個可用數據庫進行編號,根據各用戶的用戶標識利用散列算法計算各用戶的散列值,再分別將各用戶的散列值對可用數據庫的數量取余數,并以各用戶的散列值相對于可用數據庫數量的余數作為各用戶對應的編號,將各用戶的數據映射到各用戶對應編號的可用數據庫中。這樣,各用戶的數據可以根據其用戶標識映射到不同的數據庫中,從而降低數據庫的訪問壓力。
【發明內容】
[0005]需要說明的是,在應用系統的運行過程中,隨著新用戶不斷地注冊到應用系統以及已注冊用戶對應用系統的使用,應用系統需要記錄的數據會不斷增加,在當前可用于記錄數據的數據庫數量不能滿足當前記錄的數據數量對應的數據操作開銷時,就需要增加數據庫去分擔數據的記錄,從而保證各個數據庫能夠承擔其記錄的數據數量對應的數據操作開銷。可見,在應用系統的運行過程中,通常需要動態地增加數據庫去分擔數據的記錄。此夕卜,在應用系統的運行過程中,有時一些數據庫所在設備也會宕機,宕機設備的數據庫則不能再用于記錄數據和響應數據操作,從而使得用于記錄數據的數據庫減少。由此可見,在應用系統的運行過程中,用于記錄數據的數據庫的數量是動態變化的。
[0006]而在現有技術中,由于數據庫分庫分表時各用戶的數據是映射到以各用戶的散列值相對于數據庫數量的余數作為編號的數據庫,當數據庫的數量增加或者減少時,大部分用戶的散列值相對于數據庫數量的余數都會發生變化,這導致了大部分用戶的數據在數據庫數量發生變化時需要從一個數據庫迀移到另一個數據庫中記錄。因此,在應用系統的運行過程中,由于用于記錄數據的數據庫數量是動態變化的,每次數據庫數量發生變化都會導致大部分用戶的數據需要在數據庫之間進行數據迀移,而大量數據的數據迀移則導致數據庫需要為大量數據重新構建索引和緩存,從而大大降低了應用系統的數據庫性能。
[0007]由此可見,在現有技術中,應用系統運行過程中,隨著用于記錄數據的數據庫數量的動態變化,經常發生大量數據在數據庫之間進行數據迀移,從而大幅度降低了數據庫的性能,這是非常令人煩惱的過程。
[0008]為此,非常需要一種改進的數據庫的實現方法和設備,以在數據庫數量發生改變時避免大量數據在數據庫之間進行數據迀移,從而提升數據庫的性能。
[0009]在本上下文中,本發明的實施方式期望提供一種數據庫的實現方法和設備。
[0010]在本發明實施方式的第一方面中,提供了一種數據庫的實現方法,包括:
[0011]根據目標用戶的注冊時間,從可用于記錄用戶數據的可用數據庫中,確定用于記錄所述目標用戶的數據的目標數據庫;其中,各個可用數據庫各對應于一個時間段,所述目標數據庫對應的時間段包含所述目標用戶的注冊時間;
[0012]建立所述目標用戶與所述目標數據庫之間的第一對應關系,以便根據所述第一對應關系而在所述目標數據庫中查詢和/或記錄所述目標用戶的數據。
[0013]在本發明實施方式的第二方面中,提供了一種數據庫的實現設備,包括:
[0014]第一確定模塊,用于根據目標用戶的注冊時間,從可用于記錄用戶數據的可用數據庫中,確定用于記錄所述目標用戶的數據的目標數據庫;其中,各個可用數據庫各對應于一個時間段,所述目標數據庫對應的時間段包含所述目標用戶的注冊時間;
[0015]第一建立模塊,用于建立所述目標用戶與所述目標數據庫之間的第一對應關系,以便根據所述第一對應關系而在所述目標數據庫中查詢和/或記錄所述目標用戶的數據。
[0016]根據本發明實施方式的用于數據庫實現的方法和設備,應用系統可以按照用戶注冊時間來為各用戶分配用于記錄用戶數據的數據庫,以實現對應用系統記錄的用戶數據進行分庫分表,具體地,以應用系統中的任意一個用戶作為目標用戶,根據該目標用戶的注冊時間,可以從可用數據庫中確定用于記錄目標用戶的數據的目標數據庫,并建立目標用戶與目標數據庫之間的第一對應關系,以便根據該第一對應關系在目標數據庫中查詢和/或記錄目標用戶的數據,其中,各個可用數據庫各對應于一個時間段,該目標數據庫對應的時間段包含該目標用戶的注冊時間。由此可見,對于應用系統的各個用戶及各個可用數據庫來說,由于各個可用數據庫中記錄的數據均是用戶注冊時間位于其對應時間段內的用戶的數據,也即,各個可用數據庫記錄的是在各自對應時間段內注冊用戶的數據,因此,對于應用系統的運行過程中可用數據庫數量增加或減少的動態變化,大部分或全部可用數據庫依然可以是用于記錄其自身時間段內注冊用戶的數據,這使得大部分用戶的數據依然可以記錄在其原本所在的可用數據庫中而無需從一個可用數據庫迀移到另一個數據庫中,從而避免了大量數據頻繁的數據迀移所導致的重新為大量數據構建索引和緩存,大大提升了應用系統的數據庫性能,為用戶帶來了更好的體驗。
【附圖說明】
[0017]通過參考附圖閱讀下文的詳細描述,本發明示例性實施方式的上述以及其他目的、特征和優點將變得易于理解。在附圖中,以示例性而非限制性的方式示出了本發明的若干實施方式,其中:
[0018]圖1示意性地示出了本發明實施方式的一個示例性應用場景的框架示意圖;
[0019]圖2示意性地示出了本發明中數據庫的實現方法一實施例的流程圖;
[0020]圖3示意性地示出了本發明中數據庫的實現方法另一實施例的流程圖;
[0021]圖4示意性地示出了本發明實施例中一種應用系統數據庫分庫分表示例的示意圖;
[0022]圖5示意性地示出了本發明實施例中一種應用系統可用數據庫擴容示例的示意圖;
[0023]圖6示意性地示出了本發明實施例中另一種應用系統可用數據庫擴容示例的示意圖;
[0024]圖7示意性地示出了本發明中數據庫的實現設備一實施例的結構圖;
[0025]在附圖中,相同或對應的標號表不相同或對應的部分。
【具體實施方式】
[0026]下面將參考若干示例性實施方式來描述本發明的原理和精神。應當理解,給出這些實施方式僅僅是為了使本領域技術人員能夠更好地理解進而實現本發明,而并非以任何方式限制本發明的范圍。相反,提供這些實施方式是為了使本公開更加透徹和完整,并且能夠將本公開的范圍完整地傳達給本領域的技術人員。
[0027]本領域技術人員知道,本發明的實施方式可以實現為一種系統、裝置、設備、方法或計算機程序產品。因此,本公開可以具體實現為以下形式,即:完全的硬件、完全的軟件(包括固件、駐留軟件、微代碼等),或者硬件和軟件結合的形式。
[0028]根據本發明的實施方式,提出了一種數據庫的實現方法和設備。
[0029]在本文中,需要理解的是,所涉及的術語“應用系統”表示的是能夠為用戶提供服務或功能的系統,所涉及的術語“數據”表示的是用戶在應用系統中使用各種服務或功能時在應用系統中產生的操作數據。例如,在一種可能的應用場景示例中,“應用系統”可以是一種網絡社交應用,相應地,“數據”可以是網絡社交用戶在網絡社交應用平臺中發布的日志消息、聊天信息、添加好友的操作記錄、查詢消息的操作記錄等任何網絡社交用戶操作產生的數據。又如,在另一種可能的應用場景示例中,“應用系統”可以是一種電商應用,相應地,“數據”可以是電商用戶在電商平臺中購買商品的訂單記錄、查詢商品的操作記錄、收藏商品的信息等任何電商用戶操作產生的數據。可以理解的是,本發明實施方式的“應用系統”及“數據”不限于上述兩個應用場景示例,本發明實施方式的“應用系統”可以是任何一種能夠為用戶提供服務的應用系統,本發明實施方式的“數據”可以是用戶使用應用系統提供的服務時在應用系統中產生的任何一種操作數據。
[0030]此外,附圖中的任何元素數量均用于示例而非限制,以及任何命名都僅用于區分,而不具有任何限制含義。
[0031]下面參考本發明的若干代表性實施方式,詳細闡釋本發明的原理和精神。
[0032]發曰月概沐
[0033]本發明人發現,在應用系統的運行過程中,一方面,隨著新用戶不斷地注冊到應用系統以及已注冊用戶對應用系統的使用,應用系統需要記錄的數據在不斷增加,這就使得應用系統需要不斷地增加數據庫去分擔不斷增加的數據記錄,另一方面,有時一些數據庫所在的設備會出現宕機的情況,宕機設備的數據庫無法繼續用于記錄數據和響應數據操作,這就使得應用系統需要將由宕機設備的數據庫所處理的數據記錄及數據操作響應分配到其他數據庫處理,從而使得應用系統中用戶記錄數據的數據庫減少,因此,在應用程序的運行過程中,用于記錄數據的數據庫數量是動態變化的。但是,現有的數據庫實現方式中,數據庫性能無法適應應用系統運行過程中的數據庫數量動態變化,原因在于,現有的數據庫實現方式中是以散列方式來對數據庫進行分庫分表的,這導致了數據庫數量變化時為大部分用戶記錄數據的數據庫都會發生變化,從而在數據庫數量動態變化的應用系統中造成了大量數據頻繁的數據迀移,數據庫就需要為大量數據頻繁地構建索引和緩存,從而大大降低了應用系統的數據庫性能。進一步而言,現有數據庫實現方式對數據庫的分庫分表之所以會在數據庫數量動態變化的應用系統運行過程中造成大量數據頻繁的數據迀移,原因在于,現有數據庫實現方式對數據庫進行分庫分表時,各用戶的數據映射到的數據庫是以該用戶的散列值相對于數據庫數量的余數作為編號的數據庫,因此,在應用系統運行過程中,每次出現數據庫數量變化的情況,大部分用戶的散列值相對于數據庫數量的余數都會發生變化,這就導致了每次數據庫數量變化時大部分用戶的數據都需要從一個數據庫迀移到另一個數據庫中記錄。
[0034]基于上述研宄,本發明實施方式的基本思想在于:為了盡量避免在數據庫數量變化的應用系統運行過程中大量數據頻繁的數據迀移,以提升應用系統的數據庫性能,在對數據庫進行分庫分表時,可以按照用戶注冊時間來為各用戶分配用于記錄用戶數據的數據庫,具體地,應用系統的各個可用數據庫可以對應著一個時間段,各個可用數據庫中記錄的數據可以均是用戶注冊時間位于其對應時間段內的用戶的數據,也即,各個可用數據庫對應記錄的是在各自對應時間段內注冊用戶的數據,因此,對于應用系統運行過程中動態出現的可用數據庫數量變化,大部分或全部可用數據庫依然可以是用于記錄其對應時間段內注冊用戶的數據,這使得大部分用戶的數據依然可以記錄在其原本所在的可用數據庫中而無需從一個可用數據庫迀移到另一個數據庫中。
[0035]在介紹了本發明的基本原理之后,下面具體介紹本發明的各種非限制性實施方式。
[0036]應用場景總覽
[0037]首先參考圖1,圖1是本發明的實施方式的一個示例性應用場景的框架示意圖。其中,用戶通過用戶設備上的客戶端102與應用系統的服務器101進行交互。本領域技術人員可以理解,圖1所示的框架示意圖僅是本發明的實施方式可以在其中得以實現的一個示例。本發明實施方式的適用范圍不受到該框架任何方面的限制。
[0038]需要注意的是,此處的用戶設備可以是現有的、正在研發的或將來研發的、能夠通過任何形式的有線和/或無線連接(例如,W1-Fi, LAN、蜂窩、同軸電纜等)實現其上客戶端102與服務器101交互的任何用戶設備,包括但不限于:現有的、正在研發的或將來研發的智能手機、非智能手機、平板電腦、膝上型個人計算機、桌面型個人計算機、小型計算機、中型計算機、大型計算機等。
[0039]還需要注意的是,此處的服務器101僅是現有的、正在研發的或將來研發的、能夠配置應用系統的設備的一個示例。本發明的實施方式在此方面不受任何限制。
[0040]基于圖1所示的框架,服務器101根據所述目標用戶的注冊時間,從可用于記錄用戶數據的可用數據庫中,確定用于記錄所述目標用戶的數據的目標數據庫;其中,各個可用數據庫各對應于一個時間段,所述目標數據庫對應的時間段包含所述目標用戶的注冊時間。然后,服務器101可以建立所述目標用戶與所述目標數據庫之間的第一對應關系,以便服務器101根據所述第一對應關系而在所述目標數據庫中查詢和/或記錄所述目標用戶的數據。
[0041]可以理解的是,本發明的應用場景中,雖然此處和下面將本發明實施方式的動作描述為由服務器101執行,但是這些動作也可以部分由客戶端102執行、部分由服務器101執行。本發明在執行主體方面不受限制,只要執行了本發明實施方式所公開的動作即可。
[0042]示例件方法
[0043]下面結合圖1的應