2011-07-20 24 views
1

http://www.dbshards.com/articles/database-sharding-whitepapers/下的應用程序提供密鑰生成的無縫自動方法:我們究竟怎樣才能到**所有碎片**

自動遞增的密鑰管理。由數據庫管理系統提供的典型自動增量功能 會爲插入數據庫的每個新行生成一個連續的密鑰 。這適用於單個 數據庫應用程序,但在使用數據庫分片時,密鑰必須以協調的方式在所有分片中管理的 。這裏的要求 是爲應用程序提供一種無縫的自動化密鑰生成方法,可以在所有分片上運行,確保密鑰在整個系統中唯一。

我不明白我們究竟能到所有碎片下的應用程序提供密鑰生成的無縫自動化方法。

我聽說過使用GUID,但since GUID isn't guaranteed to be unique across different machines,我不明白這是如何去工作可靠

回答

1

對於MySQL,你可以使用服務器變量auto_increment_incrementauto_increment_offset有不同的服務器產生不同的ID以避免碰撞。完全取決於您如何配置正確的服務器,以便最終不會出現重複的值。

+0

問題是,要正確配置服務器,所以我們不會以重複值結束需要與所有碎片交談。不是很高效嗎? – Gerray

+1

不,每個實例的配置都不相同。如果你有6個服務器,A到F,那麼每個服務器都有一個本地配置文件,它們的偏移量設置爲1到6的唯一值,你可以將增量設置爲你想要的任何值(10的偶數倍可能會有幫助如果你需要的話,請保持清醒,以便確定某個特定記錄來自哪個服務器)。 – scwagner

1

我在爲我開發的分佈式數據庫系統而努力,當我切換到使用GUID作爲主唯一標識符時,所有問題都消失了。我強烈推薦他們。您不僅可以在單個鍵定義數據域中使用唯一標識符,還可以使用引用多個域的通用表。

我也學會了不要依賴業務數據來獲取數據庫中真正的唯一密鑰,客戶認爲這些密鑰是唯一的,但是當他們想要更改它們並且多次有未定義的情況時,總會有事件發生。