是否有分布式密钥生成的GUID替代方案?

And*_*rko 10 .net c# database guid crc

我的情况是:

  1. 我有许多客户端应用程序,它们使用的是本地数据库(MS SQL,MS Access - 抱歉,这是Enterprise系统,我必须支持遗留...)
  2. 我不知道客户之间的任何趋势 - 现在它是~10但是一年可能是~100.
  3. 这些表中的数据来到我的中央服务器,并放在一个公共表中
  4. 有时现有(客户端)数据已更改 - 我必须执行更新/删除操作
  5. 我不想使用GUID(.NET类型System.Guid) - 很难在MS Access上简单地实现和支持.此外,它对性能不利
  6. 我需要快速搜索该公用表,因此使用intlong int作为PK 会很好

所以,我想:

  1. 避免碰撞的独特之处(它将被用作PK)
  2. 它应该是int或希望long int
  3. 在插入之前必须是可分配的客户端

我目前的解决方案是从以下连接中获取CRC:

  • ProcessodID
  • Bios日期
  • 用户名(字符串,硬件\用户相关数据)
  • DateTime.Now(UNC)

目前它适用于我,但也许有更好的方法来实现我的目标?您自己的任何评论,建议,示例或经验?

更新:客户端和服务器之间的同步是定期操作,因此每天可以发生2-3次(它的配置变量)

Ste*_*eve 2

如果来自多个表的数据到达一个中心表,并且您需要解决这些记录的更改,那么我的建议是使用两列作为中心表的 PK。一列可以是来自客户端的身份字段(不是唯一的),一列可以是您分配给客户端应用程序的客户端代码(不是唯一的)。ID 和客户端代码的聚合将是您的 PK

该解决方案的优点是不需要对客户端应用程序进行任何更改(也许需要将一些身份代码发送到您的中央服务器,您可以在其中用于某些安全措施)当然,如果客户群增长(希望如此),您需要保留分配给每个客户端的集中代码表。在中央表上的搜索应该不是问题,因为您使用的是两个数字(或身份代码的短字符串)。