2009-09-18 31 views
0

我正在開發一個項目,希望從一開始就儘可能靈活和可擴展。我關心的一個問題是Joshua Schacter在工作創始人中描述的最好的問題,他指出這是他希望提前計劃的一個細節。關於多個DB /服務器信息的ID

即使在複製的情況下,通過一臺機器擴展一個數據庫也是非常具有挑戰性的。那裏的工具並不完全正確。

例如,當您將某些東西添加到表中並對它們進行編號時,這意味着您無法再添加第二臺機器,因爲這些數字會發生衝突。所以你會怎麼做?你必須想出一些完全不同的方式來做到這一點。

你有一箇中央服務器發出數字集,或者你想出的東西不是數字嗎?你使用隨機數字,並希望他們永遠不會碰撞?不管它是什麼,自動分配的ID都不會飛。

有沒有人遇到過這個問題?有什麼方法可以超越自動遞增的ID,還是有辦法讓它們在多個服務器上擴展?

回答

2

使用GUID/UUID(全局/通用唯一標識符)。理論上,它保證在多臺機器上是唯一的。

1

GUIDs,你的碰撞機率是天文數字低。

它也可能有(也就是我們俗稱)SmartGUIDs(通常稱爲COMB GUIDS - 見this analysis,特別是第7頁)在這裏你可以編碼的GUID內的時間戳,讓您得到記錄創建日期信息「免費」 - 所以您可以保存記錄創建日期時間的時間戳列 - 這可以獲取從32位整數移動到128位GUID時丟失的一些內容。與常規GUID不同,這些也可以保證是單調的,這對於聚簇索引和排序很有用。

您還可以使用具有某種類型的服務器/數據庫ID和常規自動增量標識或自動編號的組合鍵。