2

完了する必要がある現在のタスクのリストをユーザーに提供するプロジェクトがあります。すべてのユーザーが任意のタスクを完了することができるため、一度に 1 人のユーザーだけがタスクに取り組んでいることを確認するには、タスクを「ロック」できる必要があります。私はこれに SignalR を使用しているので、ユーザーはタスクのロックを要求し、成功した場合 (つまり、他の誰もロックしていない場合) は、必要な詳細情報にアクセスできます。

私の問題は、ロックされたタスクのリストを保存する方法です。当初の計画は、追加のビット フィールド「IsLocked」を Task テーブルに追加し、ユーザーがロックを要求したとき、およびタスクのロックが解除されたときにこれを更新するという単純なものでした。ただし、約 300 人の同時ユーザーがいて、1 つのタスクにかかる時間はわずか 3 ~ 4 分です。これは、データベースに対する膨大な数の追加の (そして小さな) クエリを意味します。そのため、タスク ID のリストを「lockedTasks」リストに格納するだけのメモリ内ストレージについて疑問に思っていました。

私はキャッシュの使用を検討していましたが、これを行うための最良の方法、またはより良い代替手段が存在するかどうかさえわかりません. 誰かがこれについて経験を持っているなら、いくつかのアドバイスは素晴らしいでしょうありがとう

4

3 に答える 3

2

ステートフル フィルターを検討しましたか?

詳細については、次のリンクを参照してください。

于 2011-09-30T10:15:53.910 に答える
2

IIS はそれほど優れていないため、メモリを完全に回避します。IIS で何らかの理由でアプリケーション プールを更新する必要がある場合は、リストがなくなってしまいます。

もしかしてMemCacheシステム?上記の方法で物が緩まない場合、しかし...

私は真ん中にいることをお勧めします.IOファイルは高速で、データベースにデータを要求します。特に、同じマシンにない場合(セキュリティ上の理由から、決してそうすべきではありません)、だから...理由はありません。現在有名なNoSQL データベースを使用していませんか?

MongoDBは、 .NET ライブラリを備えたドキュメント データベースであり、使いやすく、メモリほど高速ではありませんが、物理データベースよりも非常に高速です。

通常、NoSQL データベースはApp_Dataフォルダーにホストされるため、非常に高速にアクセスでき、すべてのロックされたタスクをそこに保持することができtask_idますuser_id

于 2011-09-30T08:44:02.297 に答える
0

申し訳ありませんが、アプリが 3 ~ 4 分 x 300 ユーザーごとに 1 つのクエリを処理できない場合は、何か非常に間違っています。通常、サイトを閲覧するだけで、それよりも桁違いに多くのクエリが生成されます。

于 2011-09-30T08:44:16.143 に答える