我正在开发一些将在全国多个实例中使用的软件。像许多使用登录的软件一样,我需要为每个用户提供一个唯一的ID。软件的每个实例都需要完全独立运行,但最终可能会将一些数据库组合在一起。在这种情况下,我希望每个用户的ID在所有服务器上都是唯一的。
没有服务器之间的通信(它们只服务于LAN),我认为可能从时间戳精确到毫秒生成ID可能会起作用。如果用户池只有数千而不是数百万,则与另一台服务器上的另一个用户在同一毫秒内创建一个用户的几率非常低。
是否有任何方法可以保证所有服务器之间没有通信的唯一ID?
答案 0 :(得分:5)
是的,您可以通过使用自动递增ID来轻松完成此操作,该ID会增加您拥有的服务器数量的倍数,但是从不同的数字开始。
例如,如果您有3个数据库:
Server 1: IDs increment by 3 starting from 1 E.g. 1, 4, 7, 10
Server 2: IDs increment by 3 starting from 2 E.g. 2, 5, 8, 11
Server 3: IDs increment by 3 starting from 3 E.g. 3, 6, 9, 12
答案 1 :(得分:5)
使用16字节uniqueidentifier数据类型
一个例子是
SELECT NEWID()
GO
-- This will return a new random uniqueidentifier e.g.
E75B92A3-3299-4407-A913-C5CA196B3CAB
在变量
中选择此Guid--assign uniqueidentifier in a variable
DECLARE @EmployeeID uniqueidentifier
SET @EmployeeID = NEWID()
You can directly use this with INSERT statement to insert new row in table.
- 在Employees表中插入数据。
INSERT INTO Employees
(EmployeeID, Name, Phone)
VALUES
(NEWID(), 'John Kris', '99-99999')
示例来自here,如果您想要更多信息
答案 2 :(得分:4)
您是否尝试过uniqueidentifier(GUID)字段类型?
答案 3 :(得分:2)
UUID(GUID)最适合您的情况