2011-02-02 29 views
0

我正在研究與使用Java和Cassandra數據庫的討論論壇相關的Web應用程序。爲嚴重非規範化的NoSQL數據庫設計唯一鍵(主鍵)

我需要爲存儲用戶詳細信息的行構建「密鑰」,並存儲由用戶發佈的內容的另一組行。

一種選擇是獲取由Java語言提供的隨機生成的UUID,但它們的長度爲16個字節。而且由於NoSQL數據庫涉及嚴重的非規範化,我擔心如果密鑰可能以較小的尺寸生成,是否會浪費大量磁盤空間,RAM和其他資源。

我需要生成兩種類型的密鑰,一種用於用戶發佈的其他內容的用戶&。

對於用戶發佈的內容,timestamp+userId是一個很好的關鍵。其中timestamp是發佈內容的服務器時間,userId是指用戶行的密鑰。

知道的任何建議,意見..

感謝 馬科斯

回答

2

這是一個分佈式應用程序?

然後,您可以使用一個簡單的同步計數器並在啓動時使用下一個可用的ID進行初始化。

另一方面,數據庫應該能夠處理由java創建的UUID哈希值。 這是創建像sessionIds這樣的東西的標準,它需要是唯一的。 您的問題有點類似,因爲您的上下文中的會話將代表一組用戶輸入。

+0

謝謝奧利弗!是的,這是一個分佈式數據庫Cassandra的分佈式應用程序。由於該數據庫最終是一致的,所以同步可能不會很快,並且這可能導致問題,因爲該ID的數據可能被覆蓋。但是也可以調整Cassandra的一致性級別,如果這會導致可行的解決方案,我會研究一下。除此之外還有其他的選擇嗎? – 2011-02-03 08:24:07