2016-06-16 3 views
0

私はそれに基づいて新しいものを作成し、2つのパブリックメソッドを使用して最初の場所にあった場合は古いものを削除するために、古いIdentityレコードを探すマルチスレッドWebサービスを持っているとします: - CreateIdentity - DeleteIdentityほぼ即時にデータベースレコードの作成と削除を行うことができます。

でもこのシナリオは避けてください。私たちは皆、これから来る問題を考えることができるので、作成してから削除したらどうなるのでしょうか?

具体的には、私が知りたいことがあります: - 2つのうち1つがより高い優先度を持ちます。例えば、すべての作成がテーブル上で削除の前になければなりませんか? - 優先度を除外した場合、削除アクションは常に作成よりも高速ですか?

+0

この質問に答えるには、SQL Serverのみの専門知識は十分ではありません。 –

+1

RE: "すべての作成はテーブルの前に削除する必要があります":同じ優先度はありません。 "優先度を除外した場合、削除アクションは常に作成より速いですか?"テーブルの行について言えば、削除はまずレコードを見つける必要があるため、いいえ、削除は遅くなります。 – Alex

答えて

1

私はマルチスレッドに慣れ親しんでいるとは言えませんので、この回答をどのレベルでターゲットにするかは分かりません。あなたの質問に対する簡単な答えは次のとおりです。高速である

  • - あなたは試してみてやってことことについて心配する必要はありませんので、どちら

SQL Serverは、同時実行性を管理 - 優先順位が高いのいずれか

  • 可能性があり両方のアクションが同時に行われます。同じオブジェクトに対する2つのアクションが同時に発生した場合、ロックマネージャは競合を処理します。

    どちらの方が高速であるのかについては、ある操作が理論的には他の操作よりも速いと確信していますが、実際にはより速く、おそらく「待っている」、「ブロッキング」、「スケジューリング」違いを生むだろう。

    SQL Serverには、上記の点が適用されたとしても、コマンドの優先順位を設定する機能はありません。

    削除する前に作成を行う必要がある場合は、自分で管理する必要があります。ストアドプロシージャへの1回の呼び出しが理想的ですが、2回の呼び出しを使用する必要がある場合は、2回目の呼び出しを行う前に、最初の呼び出しを待つ必要があります。両方のアクションをアトミックにする必要がある場合は、トランザクションを使用する必要があります。

  • +0

    これは私が探していた答えのタイプでした。私の質問は正しくはっきりと述べられていませんでした。回答の焦点はSQLがこれらの処理方法の代わりにWebサービス上にあったからです。私の実際のポイントを得ることに感謝@Rhysジョーンズ – Jeroen

    1

    SQL Serverはコマンドを受信した順に実行します。これらはトランザクションでラップする必要があります。作成に成功したのに削除に失敗した場合、またはその逆の場合はどうなりますか?ストアド・プロシージャを作成して、アクションが特定の順序で確実に実行されるようにすることができます。トランザクションによって、一方の操作が失敗した場合(接続の消失など)に他方の操作がロールバックされることが保証されます。

    +0

    "SQL Serverは、コマンドを受け取った順にコマンドを実行します。 - まったく真実ではありません。 –

    +0

    もちろん、それは本当です。他の考慮事項なしでは、コマンドが到着するとクエリの実行が開始されます。実行を決定する前に他のクエリが来るのを待つことはありません。 SQL Serverが最初のものが終了する前に別のクエリを開始しないとは言いませんでした。誤解されている場合は、私の知識を拡大することに非常に関心があるので、反対の文書を提供してください。 –

    +0

    @Joe Cあなたの答えをありがとう!しかし、答える前に完全な質問を読んでください。私は既にシナリオの方法を避けるべきものとして述べています。今、あなたは素敵な魔法使いが私の意図ではないと思います! :) – Jeroen

    関連する問題