Ploneで_createObjectByType
を使用する必要があります。私は引数としてオブジェクトのid
を持っています。このシナリオでは、衝突を避けるためにtime.time()
に基づくIDを作成することは安全ですか? 2つのリクエストは、time.time()
のように正確に同じタイムスタンプを持つことができますか?プログラムでploneでコンテンツタイプを作成する場合、time.time()は安全な方法ですか?
1
A
答えて
5
万一、まれに2つのリクエストがまったく同時に処理されても、競合が発生した場合、ZODBはConflictErrorを発生させてリクエストを再試行します。以下の議論への対応
:defition両方のトランザクションによって、単一のコンピュータ上で
は(各スレッドにあなたはtime.time(から同じ結果を得ました)。)重複する必要がありますZODBはMVCCあるので、各スレッドが見ていますトランザクションが開始されたときと同じようにデータベースの一貫性のあるビュー。 2番目のスレッドがコミットすると、トランザクションの開始以降に変更されたオブジェクトに書き込むため、競合エラーが発生します。
複数のコンピュータでクライアントを実行している場合、クライアント間のクロックドリフトの可能性について考える必要があります。トランザクションIDについては、ZODBは現在のタイムスタンプまたは最後のトランザクションID + 1のどちらか大きい方を選択します。
ただし、おそらく、タイムスタンプをIDとして使用しないでください。競合が発生する可能性がありますすべての要求が同じBTreeバケットにエントリを作成したいので、負荷が重いランダムにIDを取り出すことで、ほとんどすべての競合が解消されますが、非効率的にいっぱいのBTツリーが生成されます。推奨されるアプローチは、オブジェクトを作成する各スレッドが、数値空間のランダムな点から開始し、IDを順番に作成することです。 idがすでに使用されていることが分かった場合は、数字スペースの別のポイントをランダムに選択し、そこから再び開始する必要があります。私はzope.intidがこの戦略の実装を含んでいると信じています。
関連する問題
- 1. Javaで安全なランダムAESキーを作成する方法は?
- 2. 最も安全な方法は、PHPでセッションを作成する
- 3. ハッシュ暗号で安全なログインページを作成する方法は?
- 4. 安全な方法でASP.NET MVCアプリケーションでロールとスーパーユーザーを作成する方法
- 5. セッションを使用してサイト構成を保存するのは、安全で安全な方法ですか?
- 6. バッキングマップがスレッドセーフである場合、Guavaテーブルスレッドは安全ですか?
- 7. これはプログラムを設計する安全な方法ですか?
- 8. 相対的なjava.io.Fileを作成する安全な方法
- 9. howtoはjqueryで安全なajaxリクエストを作成しますか?
- 10. GETからDateTime()を作成するのは安全ですか?
- 11. セッションを安全にカウントする方法:Session_Start/End in Global.Asaxは安全で安全ですか?
- 12. グローバル変数を使用したプログラムの作成はより安全ですか?
- 13. nullの場合、HttpContext.Current.Sessionをプログラムで作成できますか?
- 14. メモリで安全な方法は?
- 15. 安全なログインシステムを作る方法
- 16. 一般的な方法でこのキャストは安全ですか?
- 17. 安全なログインを作成する
- 18. Androidで安全でないキーガードをプログラムで無効にする
- 19. Javaプログラムは、未チェックまたは安全でない操作
- 20. ソケットからテキストを出力する安全な方法です。
- 21. Plone 4でスティッキーニュースアイテムを作成する方法
- 22. rubyで安全な結合パス名を実行する方法は?
- 23. jspでgetParameterを使用する方法安全な方法
- 24. 安全な方法と安全でない方法のPlay Frameworkコントローラ。可能?
- 25. ColdFusionで安全なWebサービスを作成する
- 26. Javaで安全なWebsocket(wss)サーバーを作成する
- 27. ランダムなファイル名で安全なURL安全な文字列を生成する
- 28. Google Chromeをプログラムで安全に閉じる方法
- 29. 安全なJSONPリクエストを作成することはできますか?
- 30. プログラムでアクセスポイントを作成する方法
私は競合エラーについて正確に考えていました。それが発生した場合、どのように要求を再試行しますか?要求は失われていないのですか? –
いいえ、Plone(Zopeは実際には)競合エラーがあったため、Zopeは要求を処理しているので、要求が失われないため、再試行します。 – vangheem
私は、あなたが競合のエラー状況に遭遇するのではないかと疑います。代わりに、1つのリクエストは、すでに使用中のIDに関する例外を受け取ります。 –