我们正在寻找根据这个问题的标题生成 ID 的解决方案。
为了澄清:
- 我们正在使用几个不同的 SQL Server 和应用程序服务器,其中任何一个都可以生成 id
- 我们不想使用中央 ID 生成服务/机器
- 我们不想使用按位转换为 Guids 的 DateTimes,因为有这么多机器可能会发生冲突。
一种可能的解决方案是为每台机器分配一个起始位置、跳过和偏移量,就像这个答案:https ://stackoverflow.com/a/7916720/175127
这很容易成为我们的解决方案,但我希望你们中的某个人可能有一个更优雅的解决方案,可以更好地解决以下一些问题:
一台机器最终可能会分配更多的 ID 并远远领先于其他机器。我们可能会每天重新同步所有机器以拥有一个新的起始位置,以帮助它们保持同步,但这可能会导致大量空的、未使用的 ID。我们希望尽量减少这种情况。
我们希望看看是否有可能减少每台机器的外部依赖。在开始时,他们每个人都必须找出有多少台机器,起点是什么,并且他们必须决定唯一的偏移量。我认为有某种形式的中央控制来管理这些事情可能是不可避免的。
到目前为止,我能想到的最好的方法是拥有一台中央机器,一次分发一系列 Id。其他机器根据需要抓取范围块。如果中央机器出现故障,那么我们使用 start-skip-offset 系统作为后备。
有什么很酷的想法吗?