- 客户端将向服务器请求 1K 行 ID。
- 我必须确保我们有 1K 个 ID,clientID = -1,如果没有,我必须在表中插入 1K 个新 ID。
- 然后我必须将那些 1K ID 与 clientID 链接起来
- 将保留的 1K ID 返回给客户端。
是否就像将所有这些包装到一个事务中一样简单?
是否就像将所有这些包装到一个事务中一样简单?
您想添加第二个包含可用 ID 的表,如下所示:
AssignedIdsByClient:
AssignedId int 身份
ClientId int - 您将此 ID 范围提供给的客户
但是当您需要 1,000 个 ID 时,不要在此处插入 1,000 条记录:取而代之的是,取这个 AssignedID 并将其乘以 1,000。例如,如果某人的 AssignedID 为 15,这意味着他们在您实际需要 ID 的另一个表中拥有从 15,000 到 15,999 的 ID。
否则,如果每次有人想要一个 ID 范围时,您都尝试在单个事务中插入 1,000 条记录,那么您将面临并发噩梦。
是的,您可以将这些全部包装在一个事务中,并且在您提交之前,其他客户端将无法看到它们。