0

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

谢谢

4

1 回答 1

0

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

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

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

于 2012-06-06T02:49:08.927 回答