問題タブ [database-concurrency]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - IIS Web 要求から EF6 を使用して SQLServer を読み書きするときの同時実行制御
IIS でホストされる ASP.NET ApiController を作成しています。アクションで、Tencent という会社が提供する A という名前の Web サービスを呼び出す必要があります。このサービスでは、認証にキーを使用する必要があります。キーは、Tencent の B という名前の別の Web インターフェイスを呼び出すことによって生成され、キーは 3 時間有効です。サービス B は 1 日あたりの通話数に制限があります。したがって、A を使用したいときはいつでも B を呼び出すことはできません。B を一度だけ呼び出して、将来の使用のためにデータベースにキーを保存できます。
つまり、サービス A を使用するたびに、データベースからキーの検証を確認し、有効期限が切れている場合は B を呼び出して新しいキーを取得する必要があります。
ここで、B を呼び出してキーを更新する必要がある場合、新しいキーが返される前に ApiController アクションが再度呼び出されたらどうなるでしょうか? 新しいリクエストは、データベース内のキーが古くなっていることも検出し、B を再度呼び出して、A が新たに取得したキーを無効にし、A がキーを再度取得するという無限ループを引き起こします。
私の質問は、どうすればこの種の心配を取り除くことができますか? どうすれば始められますか? SQL または IIS または ASP.NET からですか?
EF6 でデータベースの読み取り/書き込みを行い、ASP.NET MVC 5 を使用しています。
ご協力いただきありがとうございます!
-- 補足 -- lock キーワードの使用を勧められました。ただし、IIS のすべての要求でロックがデータベースの読み取り/書き込み部分を安全に保護することを知って安心したいと思います。IIS が同じ ASP.NET モジュールへの複数の要求をどのように処理し、その同時実行制御を行うかについての記事はありますか?
mongodb - Mongo:最後のドキュメントが異なる場合にのみ挿入
MongoDB でこれを行うための同時実行に適した方法はありますか:
フィールドでソートされた最後のドキュメントが別のフィールドに異なる値を持つ場合にのみ、ドキュメントを挿入したいと考えています。目標は、すべての生の値ではなく、遷移のみを格納するコレクションを持つことです。
例 :
これがコレクションです(人間にわかりやすいタイムスタンプ付き):
次に、新しいステータスを受け取ったとしましょうA
:
の場合A
、トランジションがないstatus
ので、コレクションを更新して次のようにしたいと思います。
ただし、次のような新しいステータスを受け取った場合B
:
status
新しいトランジションを登録し、新しいドキュメントをコレクションに保存したいと考えてB
いstatus
ます。timestamp === 3000
status === "HEALTHY"
コレクションは次のようになります。
私が考えることができるのは、findOne
最近更新されたドキュメントを取得するために を作成し、その後に取得したドキュメントと新しく受信したオブジェクトのメモリ内比較に応じてupdate
orを作成することだけです。しかし、別のプロセスが私と私の間に別のドキュメントを挿入する可能性があるため、これは同時実行に適していません...insert
find
insert/update
これを可能にする可能性のある、私が気付いていないパターンまたはmongo機能はありますか?
database - PostgreSQL は読み取り専用トランザクションのパフォーマンスの最適化を実行しますか?
リファレンス ドキュメントによると、READ ONLY トランザクション フラグは、DEFERRABLE トランザクションを許可する以外に役立ちますか?
DEFERRABLE トランザクション プロパティは、トランザクションが SERIALIZABLE かつ READ ONLY でない限り効果がありません。トランザクションに対してこれら 3 つのプロパティすべてが選択されている場合、最初にスナップショットを取得するときにトランザクションがブロックされる可能性があります。その後は、SERIALIZABLE トランザクションの通常のオーバーヘッドがなく、シリアライゼーションに寄与したりキャンセルされたりするリスクなしに実行できます。失敗。このモードは、長時間実行されるレポートまたはバックアップに適しています。
データベース エンジンは、読み取り専用トランザクションに対して他の最適化を実行しますか?
ios - NSConfinementConcurrencyType から NSPrivateQueueConcurrencyType および NSMainQueueConcurrencyType に切り替えるリスクはありますか?
NSConfinementConcurrency
CoreData を使用するレガシー コードがいくつかあり、それらの使用をNSPrivateQueueConcurrencyType
orに切り替えNSMainQueueConcurrencyType
ます。
NSConfinementConcurrencyType
からに切り替える際に注意すべき問題NSPrivateQueueConcurrencyType
やリスクはありますか?NSMainQueueConcurrencyType
web - Web アプリケーションのロジックとデータベースの同時実行を処理する方法は?
というテーブルがあるとしましょうitems
。Web アプリケーションのユーザーはテーブルの行を削除できitems
ますが、テーブルを空にしたくありません。
したがって、現在、アプリケーションに次のようなコードがあります。
しかし、このコードは並行性の問題に対して脆弱であることを認識しています。たとえば、現在のサイズitems
が 2 で、このコードをほぼ同時に実行する 2 つのスレッドがある場合、テーブルが空になる可能性があります。
この問題は、Web アプリケーションを作成する人にとってはよくあることだと思います。人々はすでにそれを解決しているはずです。これに対して利用可能なソリューションは何ですか?
python - DynamoDb セーフ アップデート
単純なデータベース (1 つのキー、1 つの数値) でカウンターを更新しようとしています。アトミック カウンターは自然な解決策のように思えますが、スレッド セーフな更新が必要です。つまり、更新が互いに干渉しないようにする必要があります。
この回答は、実際の書き込みを実行する前に、データが別の更新によって変更されていないことを再確認する必要があることを示唆しているようです。
私の質問は、データベースの現在の値を a で参照するにはどうすればよいConditionExpression
ですか? table
がオブジェクト (Python API) であると仮定するとdynamodb.Table
、これは私が書いたコードですupdate_item
:
node.js - ACID トランザクションとデータベースの同時実行を適切に処理するための NodeJS フレームワーク
私は、Java / Hibernate でリレーショナル データベースを数年間使用してきた NodeJS の世界の初心者です。
プロジェクトに Node を使用したいと考えており、次のような適切なデータベース トランザクション/同時実行性を処理するフレームワーク/ORM について調査するのに時間を費やしました。
- ACID トランザクション ブロックを確保する (操作セットが完全に実行されるか、まったく実行されない)
- 並行性に対処する、つまり、戦略を楽観的/悲観的ロックとして活用する
最も有望なものとして、SequelizeやWaterlineなどのいくつかの有望な ORM を調べました。
- Waterline は良さそうに見えますが、上記の両方の機能がありません。
- Sequelize は、適切な ACID トランザクション処理により、より包括的に見えます。ロックと並行性のサポートはありません。
NodeJS の専門家に、特定のパターンや戦略、およびデータベース レベルで高度な同時負荷を処理する方法、失敗したトランザクションをきれいに再試行する方法、または HA システムでデータの整合性を確保する方法を実装するモジュールについて尋ねたいと思います。