【问题标题】:Is it possible for an ASP.NET server to generate the same GUID to more than one user?ASP.NET 服务器是否可以为多个用户生成相同的 GUID?
【发布时间】:2008-11-07 14:13:48
【问题描述】:

我看过GUID Collisons 讨论,但只是想知道如果两个客户端同时访问生成 GUID 的同一个网页(可能精确到微秒),是否会发生 GUID 冲突?

【问题讨论】:

标签: asp.net guid


【解决方案1】:

理论上是可能的,但可能性很小。

【讨论】:

  • 这种情况不太可能发生,以至于您将时间花在其他地方要好得多。与两次生成相同的 GUID 相比,您的服务器更有可能着火。
  • 是的,“极不可能”并没有真正做到公正,因为除了随机元素之外,还有一个连续的“唯一性”元素。因此,不仅两个用户必须滚动相同的随机数,而且该数字必须多次发生,以至于唯一性溢出。
【解决方案2】:

没有。如果发生这种情况,赶紧出去买彩票!

【讨论】:

    【解决方案3】:

    在单个服务器上,不,这是不可能的。第 4 版 Guid 由(除其他外)伪随机 54 位值组成,据我了解,它们在重复之前循环遍历所有值。

    如果在多个服务器上创建,则可能会发生 guid 冲突,尽管这种可能性极小。

    请参阅RFC 4122,特别是第 4.1.5 节。我相信现代 Windows 使用 v4 UUID。

    【讨论】:

      【解决方案4】:

      From Wikipedia, the free encyclopedia

      全球唯一标识符或 GUID(发音为 /ˈguːɪd/ 或 /ˈgwɪd/)是软件应用程序中使用的一种特殊类型的标识符,以便提供在任何上下文中唯一的参考编号(因此,“全局”),例如,在为软件应用程序中的一种访问点定义内部引用或在数据库中创建唯一密钥时。 虽然不能保证每个生成的 GUID 都是唯一的,但唯一键的总数(2128 或 3.4×1038)是如此之大,以至于生成两次相同数字的概率非常小。例如,考虑可观测宇宙,它包含大约 5×1022 颗恒星;然后,每颗星都可以有 6.8×1015 个普遍唯一的 GUID。

      【讨论】:

      • 我在 411f4936-afb4-4a5b-a168-acfb6d750e03 上拨打 dibs!
      【解决方案5】:

      如果您生成大量的 GUID,那么由于Birthday paradox 而发生冲突的可能性会变得非常高。理论上 GUID 冲突应该是极不可能的(天真的直觉),但实际上它时常发生。

      当然,以编程方式处理这些冲突是浪费时间,但您仍然应该以这样的方式编写代码,如果发生这种情况,那么您的代码应该大声失败,而不是悄悄地和未被检测到。

      【讨论】:

        猜你喜欢
        • 2013-03-31
        • 1970-01-01
        • 2018-08-19
        • 2020-10-30
        • 1970-01-01
        • 2020-09-24
        • 2015-12-30
        • 1970-01-01
        • 2021-12-11
        相关资源
        最近更新 更多