2009-11-30 61 views
3

要標記我們創建的數據,我正在考慮使用uuids。安全性不是問題,所以我打算使用版本1(基於日期和MAC地址)。唯一值得關注的是每個用戶可能會從具有多個線程的不同進程一次創建多個數據文件。假設Python的uuid庫是線程安全的(儘管它看起來不是這樣),但仍然存在多進程問題。我正在考慮用破折號和進程號加後綴uuid。來自同一臺機器上多個進程的唯一UUID

由於我們的團隊對uuids的經驗不多,有什麼問題需要記住嗎?多進程問題通常如何處理?

+0

Python 2.5的'uuid.uuid1()'線程不安全的部分是當它比較當前的當前時間戳和以前的時間戳。如果沒有鎖定,兩個進程最終可能會與全局保存的時間戳進行比較。 (這對我的未經訓練的眼睛來說是這樣的。) – AFoglia 2009-11-30 18:09:05

+0

我希望在設計uuid時能夠回答上述更多的慣例。特別是我擔心有一個不使用直接進程id的好理由。但是,缺乏這一點,我會接受wcoenen的答案。他有一個好點,但我認爲這與我的特殊情況無關。 – AFoglia 2009-12-08 15:55:26

回答

2

只需使用uuid4即可獲得完全隨機的UUID。沒有必要擔心碰撞。

編輯迴應評論:根據我的經驗,冗餘數據遲早會導致不一致。有一個原因,避免冗餘是關係數據庫設計的教條。

因此,不要將UUID用作實際「原始計算機」和「時間戳」數據的「冗餘備份」。將其作爲純粹的唯一ID使用,不帶任何其他信息,或根本不使用它。

+0

我寧願有uuid1的(弱)可追溯性。該元數據(創建時間,計算機)應該寫入文件本身,但像大多數編碼標準一樣,不能保證。 – AFoglia 2009-11-30 19:51:14

+0

相信我,我們現在有很多不一致之處,而且我們寫得不夠多。我寧願把它作爲備份,從不使用它,而不是依靠我們所有的程序來做正確的事情。後者是不可能的。這至少給我一個小的機會,當有人搞砸了數據。 (我不是故意以編程方式使用它,而是需要跟蹤我們的錯誤。)如果我要定期使用它,我會使用比uuid更容易閱讀的內容。 – AFoglia 2009-11-30 23:39:27

相關問題