2011-03-05 116 views
2

我正在開發一個使用Java和分佈式的noSQL DB(Cassandra)的社交Web應用程序。 我需要爲應用程序中的新用戶和帖子分別生成32位和64位大小的ID。生成int32和int64大小的唯一主要ID

由於建立在分佈式平臺之上,所以我們生成id/keys的問題變得稍微複雜一些。雖然已經有像Zookeeper /或twitter的雪花這樣的解決方案可以幫助緩解這種痛苦,但這些解決方案似乎並不簡單。

從頂層視圖看這些解決方案後,我覺得要用最簡單的解決方案和最成熟的解決方案。 像flickr票務服務器一樣使用MySQL數據庫,我認爲它是第一選擇,因爲它似乎是最簡單的解決方案

http://code.flickr.com/blog/2010/02/08/ticket-servers-distributed-unique-primary-keys-on-the-cheap/

我知道,這將創建一個圍繞一個分佈式系統SPOF ..但我依然相信這將是我早年最簡單的解決方案(當我在資金方面有更少的資源和人力)。當我的應用程序增長時,我認爲切換並不困難,因爲它們不會傳輸大量數據。所以對於我的應用程序的初期狀態,我猜MySQL可以以最好最簡單的方式爲我生成Ids。

這樣選擇的主要因素: -

1. Easier Implementation 
    2. Easy switching anytime in the future 
    3. Mature 
    4. MySQL may be required for our other needs as well, already 

我想使用一個MySQL服務器最初後來改用喜歡兩臺服務器作爲Flickr的序刪除SPOF解決方案。

有人可以指出當我考慮切換到像zookeeper或snowflake這樣的替代解決方案時可能會出現什麼問題嗎?或者當前提出的方法可能存在什麼缺點?

非常感謝您的時間!

+0

您可以使用UUID。 – 2011-03-05 05:06:15

+0

我想保持我的ID爲32位和64位的大小隻有 – 2011-03-05 05:20:06

+0

,也希望某種排序 – 2011-03-05 05:20:34

回答

1

我知道這將創建一個周圍分佈 系統SPOF ..但我依然相信 這將是我早年

沒有最簡單 的解決方案,最簡單的解決是使用分佈式dbms提供的標識符。這樣避免了

  • 單獨的服務器硬件爲MySQL
  • 安裝,配置和保護 另一個操作系統
  • 安裝,配置和保護 另一個DBMS

而且你可能需要的順序性比你大很多想要吧。

我知道將圍繞 分佈式系統創建SPOF。

它會創建多個單點故障。每個服務器硬件(可能除了磁盤)都是單點故障的可能性很大。 (你打算放入多少電源?有多少個磁盤控制器?有多少個NIC?)還有一大批軟件單點故障。

+0

我會更喜歡,因爲有任何這樣的設施由我的DBMS(卡桑德拉)提供,但不幸的是沒有。其他cassandra用戶或者依賴於像雪花一樣的其他解決方案,如flicr票務服務器或uuids。我想避免uuids,因爲它們太大,我的db將嚴重非規範化並需要緩存。 – 2011-03-18 02:30:41

+0

但我從來都不想要完美的順序性,我只是想要它,這樣我的i32 ID不會太早完成 – 2011-03-18 02:33:39

+0

@Marcos:你預計每天會使用多少個ID? – 2011-03-18 08:28:02