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. 最も安全な方法は、PHPでセッションを作成する
- 2. ハッシュ暗号で安全なログインページを作成する方法は?
- 3. Javaで安全なランダムAESキーを作成する方法は?
- 4. 安全なパスワードフィールドでユーザーを作成する方法
- 5. 安全な方法でASP.NET MVCアプリケーションでロールとスーパーユーザーを作成する方法
- 6. セッションを使用してサイト構成を保存するのは、安全で安全な方法ですか?
- 7. バッキングマップがスレッドセーフである場合、Guavaテーブルスレッドは安全ですか?
- 8. これはプログラムを設計する安全な方法ですか?
- 9. C#でプライベートオブジェクトの型の安全を作成する方法
- 10. 安全なオンラインコンパイラの作成方法?
- 11. 相対的なjava.io.Fileを作成する安全な方法
- 12. GETからDateTime()を作成するのは安全ですか?
- 13. howtoはjqueryで安全なajaxリクエストを作成しますか?
- 14. この方法は安全ですか?
- 15. セッションを安全にカウントする方法:Session_Start/End in Global.Asaxは安全で安全ですか?
- 16. XSSで安全なブラウザベースのコードエディタの作成方法
- 17. 多くのデータを処理するジョブを作成する場合は、安全ですか?
- 18. グローバル変数を使用したプログラムの作成はより安全ですか?
- 19. plone 5のplone巧みなコンテンツタイプのコンテンツマイグレーション
- 20. Python:PyPi public modules:安全で安全かどうかを判断する方法は?
- 21. Scalaで型安全なフィルタリングを作成するには?
- 22. char []フィールドのゲッターを作成する安全な方法
- 23. Laravel 5.2で安全なルートを作る方法は?
- 24. CIでAndroidアプリケーション用の安全なAPIを作成する方法
- 25. Parse-server/iOSで安全な方法でLinkedInログインを統合
- 26. PythonでMySQLに接続する:安全な方法ですか?
- 27. nullの場合、HttpContext.Current.Sessionをプログラムで作成できますか?
- 28. 管理者権限でプロセスを作成する最も安全な方法は何ですか?
- 29. Androidで安全でないキーガードをプログラムで無効にする
- 30. 安全なページに安全でないコンテンツを表示する方法
私は競合エラーについて正確に考えていました。それが発生した場合、どのように要求を再試行しますか?要求は失われていないのですか? –
いいえ、Plone(Zopeは実際には)競合エラーがあったため、Zopeは要求を処理しているので、要求が失われないため、再試行します。 – vangheem
私は、あなたが競合のエラー状況に遭遇するのではないかと疑います。代わりに、1つのリクエストは、すでに使用中のIDに関する例外を受け取ります。 –