2012-06-06 57 views
1

我正在集羣環境中開發Web應用程序。問題是我們需要爲每個創建的實體生成一個ID。我們處於一個具有多個數據庫節點的環境中,這些數據庫節點都是相互流式傳輸的。我的想法是一個帶有偏移量的序列。因此,一個站點的ID將以1結尾,接下來的2個,依此類推。這似乎是一個難以實施的解決方案,因爲您僅限於許多環境。當您處於受干擾的數據庫環境時,保證唯一生成的主鍵的「最佳」方式是什麼?集羣環境中的數據庫ID生成

回答

0

就我個人而言,我更喜歡偏移序列。是的,你被限制在一定數量的環境中,但實際上,你通常可以從一開始就設置一些東西,以便可用環境的數量遠遠超過你真正需要的環境。如果你這樣做

在網站1

CREATE SEQUENCE sequence_name 
    START WITH 1 
    INCREMENT BY 1000; 

在現場2

CREATE SEQUENCE sequence_name 
    START WITH 2 
    INCREMENT BY 1000; 

上下行,最多可以有999個站點,你必須返工你的序列之前。這通常綽綽有餘。如果您認爲實際上可能有1000個站點,則可以將增量設置爲10,000或100,000。給定序列可以生成的值的數量,即使將增量設置爲數百萬,也不會耗盡。實際上,在處理序列問題之前,您會遇到流處理太多站點的問題。

如果您不想走這條路,另一個選擇是使用SYS_GUID生成一個全局唯一的ID並將其用於您的主鍵。這不像使用序列那麼高效,它需要更多的空間,但它確實允許您擁有任意數量的機器。