SQL Azure和成员资格提供程序租户ID

时间:2012-06-05 16:03:56

标签: asp.net-membership azure-sql-database

将BIGINT引入ASP.NET Membership功能以便唯一引用用户并将该BIGINT字段用作tenant_id可能是一个好方法?保持现有功能以GUID形式生成UserIds并且不从零开始实现成员资格提供程序将是完美的。由于应用程序将在多个服务器上运行,因此BIGINT tenant_id必须是唯一的,并且它不应该依赖于生成这些ID的某些中央权限。使用SPLIT AT命令可以很容易地使用这些tenant_id,这将允许将用户分成新的联合成员。有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

你可以使用bigint。但您可能必须修改依赖用户ID的所有存储过程。使ID全球唯一通常不是问题。只要ID是主键,数据库就会强制它是唯一的。否则,在插入新数据时会出现错误(在这种情况下,您可以修改ID并重试)。

因此,最重要的区别是您可能需要修改存储过程。你可以选择这里。如果使用GUID,则无需执行任何操作。但是,可能很难预测如何拆分联合以平衡查询。正如另一个主题(http://stackoverflow.com/questions/10885768/sql-azure-split-on-uniqueidentifier-guid/10890552#comment14211028_10890552)中所指出的,您可以在中间点对现有数据进行排序。但您不知道将来的数据将插入哪个联合。联盟将存在不平衡的潜在风险,您可能需要定期合并和拆分它们以保持联合状态。

通过使用bigint,您可以更好地控制密钥。例如,您有两个联盟。第一个具有从1到10000的ID,第二个具有从10001到20000的ID。在创建新用户时,首先检查每个联合中有多少记录。假设联邦1有500条记录,联邦2有1000条记录,为了平衡负载,你选择插入联邦1,所以你选择1到10000之间的ID。但是使用bigint,你可能需要做更多工作来修改存储程序