- クライアントは、サーバーから 1K 行の ID を要求します。
- clientID = -1 の 1K の ID があることを確認する必要があります。そうでない場合は、1K の新しい ID をテーブルに挿入する必要があります。
- 次に、これらの 1K ID を clientID にリンクする必要があります
- 予約済みの 1K ID をクライアントに返します。
これらすべてをトランザクションにラップするのと同じくらい簡単ですか?
これらすべてをトランザクションにラップするのと同じくらい簡単ですか?
次のように、使用可能な ID を保持する 2 番目のテーブルを追加します。
AssignedIdsByClient:
AssignedId int ID
ClientId int - この ID 範囲を与えた顧客
ただし、1,000 個の ID が必要な場合は、ここに 1,000 レコードを挿入しないでください。代わりに、この AssignedID を取得して、1,000 倍します。たとえば、誰かが AssignedID 15 を取得した場合、実際に ID が必要な他のテーブルで 15,000 から 15,999 までの ID を所有していることを意味します。
そうしないと、誰かが ID 範囲を要求するたびに 1 回のトランザクションで 1,000 レコードを挿入しようとすると、同時実行の悪夢に見舞われることになります。
はい、これらすべてを単一のトランザクション内にラップできます。コミットするまで、他のクライアントはそれらを見ることができません。