一種分布式數據庫主鍵生成的方法和系統的制作方法
【技術領域】
[0001]本發明涉及計算機技術領域,特別是涉及一種分布式數據庫主鍵生成的方法和系統。
【背景技術】
[0002]隨著互聯網應用的不斷發展,越來越多的應用系統部署朝著大規模、分布式、多機協同的方向發展。同時,所有項目中的數據庫都需要選擇一種主鍵生成的策略,用來完成唯一主鍵的生成工作。通常,數據庫主鍵生成分為單機生成和分布式生成兩種。單機生成是指在單臺機器上生成主鍵,所有請求順序執行,典型的方式是數據庫自增ID。分布式生成則是指在多臺機器上來生成主鍵。
[0003]其中分布式生成主鍵的通常做法,一種是利用特殊的規則在不同的機器上生成互不重復的ID,典型的方式是生成GUID或者包括地域、機房、機器信息在內的自定義編碼;還有一種是通過一個集中式鎖的管理來實現分布式主鍵生成的唯一性,典型的方式是通過關系數據庫鎖或者可以加鎖的內存緩存。
[0004]關于第一種方法,雖然在特殊規則下可以生成不重復的ID編碼,但由于編碼本身的無規律性,這種編碼會明顯降低數據庫主鍵索引的性能,同時因為字段通常比較長,需要占用更多的存儲空間,如GUID是32個十六進制字符。
[0005]關于第二種方法,雖然采用集中式的鎖可以繼續使用自增ID這種有益于索引和存儲的方式,但集中式的鎖會是整個系統的瓶頸,因為每次生成主鍵都需要對鎖資源進行鎖定互斥處理,需要協同的機器越多,對集中式鎖的訪問沖突就會越劇烈,降低了整體分布式環境的處理能力,也限制了多級協同的規模。
[0006]同時,一旦集中式的鎖出現故障,整個主鍵生成也將完全中斷。因此如何解決分布式主鍵生成中集中式鎖的缺陷就顯得很有意義。
[0007]數據庫中的每張數據表都有一個主鍵字段來唯一標識一條記錄,主鍵也會默認加入到索引中以提高數據庫操作的效率。主鍵生成策略的首要一點是保證生成記錄的唯一性,一般對于單個數據庫實例的主鍵通常會按照某個ID自增完成,但在業務規模越來越大的情況下,單個數據庫實例會由于滿足不了需求而按照一定規則拆分成多個分布式的數據庫實例,如果按照普通的自增是無法保證在分布式環境中的主鍵唯一性,在這種情況下就需要在分布式的環境中生成唯一的數據庫主鍵,同時還要最大化的提高主鍵生成效率。
【發明內容】
[0008]本發明的目的在于:針對現有技術中存在的上述技術問題,提供了一種分布式數據庫主鍵生成的方法,并且提供了基于該方法保證分布式主鍵唯一性生成的系統。
[0009]本發明是通過以下技術方案實現的:一種分布式數據庫主鍵生成的方法,在多機分布式環境中,保證各個節點都是對等的情況下,各個節點通過自動協商來決定主鍵生成。
[0010]進一步,所述的各節點協商確定主鍵生成是基于一致性算法下。[0011 ] 一種分布式數據庫主鍵生成的系統,系統流程步驟如下:
(1)任意節點在正常運行中;
(2)某節點收到主鍵生成請求;
(3)該節點啟動主鍵預生成,生成一個唯一標識;具體地如下:
如果某個節點收到某個主鍵的生成請求,則該節點先會根據主鍵標識和按照預定規則(如自增)生成的新主鍵ID值計算出一個在所有工作節點中對當前這個主鍵生成請求的唯一標識,然后以一個全局唯一且遞增的編號向其他工作節點發出執行這個請求的提案,這個全局唯一且遞增的編號可以由當前的時間戳加上工作節點IP組成,提案中的唯一標識代表請求本身。
[0012]其他節點在收到這個提案后,首先檢查關于這個主鍵生成請求有沒有已收到其他的提案,如果已收到關于這個生成請求的提案,接下來需要比較已收到的提案號和剛收到的這個提案號的大小。
[0013]如果已收到的提案號大于這個提案號,則直接拒絕當前提案。
[0014]如果已收到的提案號小于這個提案號,則同意該提案,但同時需要告知發起提案的節點本節點之前已經收到過其他節點關于這個請求的提案。
[0015]如果沒有收到其他提案,則直接同意這個提案。
[0016](4)該節點將步驟(3)生成的一個唯一標識與其他節點協商確定是否可以生成該節點;協商如下:
如果同意提案的節點數超過半數,且都是簡單同意,則該節點再次向其他節點發起執行這個請求提案的提交。
[0017]如果同意提案的節點數超過半數,但有節點反饋在本提案之前已收到過其他關于這個請求的更小提案號,則該節點需要提交具備更小編號的其他節點關于這個請求執行的提案。
[0018]其他節點在收到新提交的提案后,按照與步驟(3)相同的規則進行判斷處理。
[0019]最終,發起提案的節點在指定時間內收到其他節點的反饋后:
如果同意提交提案的節點數超過半數,說明提案已通過,再根據提案內容決定請求是在哪個節點運行。如果是在本機執行,則接下來就執行該主鍵生成;如果是在其他節點運行,則接下來由其他節點執行該主鍵生成。
[0020]如果同意提交提案的節點數沒有超過半數,則該次提案失敗,本節點不執行該次請求。
[0021](5)生成主鍵。
[0022]進一步,所述的該節點為收到主鍵生成請求的節點。
[0023]進一步,所述步驟(3)的主鍵預生成為根據主鍵的標識和期望生成的主鍵ID來生成一個唯一標識,所述的唯一標識會在步驟(4)中使用。
[0024]進一步,所述的步驟(4)中的協商包括:若大多數節點同意執行,則進入步驟(5);若大多數節點不同意執行,則返回到步驟(I)。
[0025]進一步,所述的任意節點為多個對等的工作節點;每個工作節點都負責處理主鍵的生成;所述的每個工作節點都會隨機收到對某個主鍵的生成請求。
[0026]綜上所述,由于采用了上述技術方案,本發明的有益效果是:本發明通過引入分布式環境中的多個對等節點間自動協商來決定分布式主鍵生成,能夠有效的以節點協商方式解決因為集中式鎖故障導致的分布式主鍵生成的整體癱瘓問題,使得分布式系統可以完