要標記我們創建的數據,我正在考慮使用uuids。安全性不是問題,所以我打算使用版本1(基於日期和MAC地址)。唯一值得關注的是每個用戶可能會從具有多個線程的不同進程一次創建多個數據文件。假設Python的uuid庫是線程安全的(儘管它看起來不是這樣),但仍然存在多進程問題。我正在考慮用破折號和進程號加後綴uuid。來自同一臺機器上多個進程的唯一UUID
由於我們的團隊對uuids的經驗不多,有什麼問題需要記住嗎?多進程問題通常如何處理?
要標記我們創建的數據,我正在考慮使用uuids。安全性不是問題,所以我打算使用版本1(基於日期和MAC地址)。唯一值得關注的是每個用戶可能會從具有多個線程的不同進程一次創建多個數據文件。假設Python的uuid庫是線程安全的(儘管它看起來不是這樣),但仍然存在多進程問題。我正在考慮用破折號和進程號加後綴uuid。來自同一臺機器上多個進程的唯一UUID
由於我們的團隊對uuids的經驗不多,有什麼問題需要記住嗎?多進程問題通常如何處理?
只需使用uuid4即可獲得完全隨機的UUID。沒有必要擔心碰撞。
編輯迴應評論:根據我的經驗,冗餘數據遲早會導致不一致。有一個原因,避免冗餘是關係數據庫設計的教條。
因此,不要將UUID用作實際「原始計算機」和「時間戳」數據的「冗餘備份」。將其作爲純粹的唯一ID使用,不帶任何其他信息,或根本不使用它。
Python 2.5的'uuid.uuid1()'線程不安全的部分是當它比較當前的當前時間戳和以前的時間戳。如果沒有鎖定,兩個進程最終可能會與全局保存的時間戳進行比較。 (這對我的未經訓練的眼睛來說是這樣的。) – AFoglia 2009-11-30 18:09:05
我希望在設計uuid時能夠回答上述更多的慣例。特別是我擔心有一個不使用直接進程id的好理由。但是,缺乏這一點,我會接受wcoenen的答案。他有一個好點,但我認爲這與我的特殊情況無關。 – AFoglia 2009-12-08 15:55:26