我必須在Plone上使用_createObjectByType
。我有一個參數id
的對象。在這種情況下,創建一個基於time.time()
的ID以避免碰撞會安全嗎?兩個請求是否可以具有與time.time()
所示完全相同的時間戳?它是否是time.time()以編程方式在plone上創建內容類型時的安全方法?
1
A
回答
5
即使在極少數情況下兩個請求在同一時間處理完畢,如果出現衝突,ZODB將引發ConflictError並重試您的請求,您將完全安全。
應對下面的討論:
一臺計算機上然後通過defition交易雙方必須重疊(你從了time.time()的每個線程相同的結果。)ZODB是MVCC,所以每個線程看到與交易開始時一致的數據庫視圖。當第二個線程提交時,將會引發衝突錯誤,因爲它會寫入自事務開始以來發生更改的對象。
如果您的客戶端運行在多臺計算機上,那麼您需要考慮客戶端之間時鐘漂移的可能性。對於其交易ID,ZODB選擇當前時間戳或最後一個交易ID + 1中的較大者。
但是,也許您應該考慮不使用時間戳作爲ID,因爲它會導致衝突因爲所有請求都需要在同一個BTree桶中創建條目。隨機挑選ID將消除幾乎所有的衝突,但會導致效率低下的BTrees。推薦的方法是創建對象的每個線程在數字空間的隨機點開始,並順序創建ID。如果它發現已經使用了一個ID,那麼它應該隨機選取數字空間中的另一個點並從那裏重新開始。我相信zope.intid包含了這個策略的實現。
相關問題
- 1. 以編程方式創建Drupal 7內容類型時,是否有添加字段元組的方法?
- 2. 以編程方式在果園中創建內容類型CMS
- 3. Ruby類方法是否線程安全?
- 4. 以這種方式編寫Android兼容代碼是否安全?
- 5. 是否可以通過編程方式更改內容類型的ResourceFolder屬性?
- 6. 是否可以在AutoCad中以編程方式創建標籤?
- 7. 以編程方式確定OSX上的文件內容類型
- 8. 是否可以訪問在方法內創建的類?
- 9. yii模型save()方法是否安全?
- 10. 是否可以在Delphi中創建一個類型方法?
- 11. 是否可以編寫一個創建方法的方法?
- 12. 如何以類型安全的方式創建Apache Spark的TypedColumn?
- 13. Drupal 7以編程方式創建帶有現有字段的內容類型
- 14. 以編程方式創建的Jquery-UI的格式內容Accordion
- 15. 以這種方式處理方程是否安全?
- 16. 安排以編程方式創建NSButtons
- 17. 是否可以創建一個未定義類型的方法?
- 18. 是否可以在Java,Android上以編程方式創建圖像?
- 19. IEnumerable Linq方法是否線程安全?
- 20. 以編程方式創建django模型
- 21. 類方法可以是內聯方式還是靜態方式?
- 22. 是否有可能以編程方式創建Google API KEY?
- 23. 是否有可能以編程方式創建BackgroundWorkers?
- 24. 是否有可能以編程方式創建散列規則?
- 25. 在UI線程上編組的方法是否需要線程安全
- 26. 以編程方式禁用瀏覽器安全/不安全內容提示
- 27. 以編程方式創建UML類圖
- 28. ASP.NET:以編程方式創建CSS類
- 29. 以編程方式創建CSS類ASP.Net
- 30. iOS - 如何以編程方式在安全區域內創建視圖
我正在想衝突錯誤:如果它被提出,它如何重試請求?請求是否丟失? –
不,Plone(Zope實際上)重試它,因爲有衝突錯誤,所以請求不會丟失,因爲Zope是處理請求的人。 – vangheem
我懷疑你會遇到衝突錯誤的情況。相反,一個請求會收到有關正在使用的ID的例外情況。 –