GUID 到底是什么?为什么以及我应该在哪里使用它?
我在很多地方和维基百科中都看到了对 GUID 的引用,但并不清楚告诉你在哪里使用它。如果有人能回答这个问题,那就太好了。谢谢
16 回答
GUID 在技术上代表全球唯一标识符。实际上,它是一个 128 位结构,不太可能重复或产生冲突。如果您进行数学计算,值的域在undecillions中。
当您有多个独立系统或客户端生成需要唯一的 ID 时,请使用 guid。
例如,如果我有 5 个客户端应用程序创建事务数据并将其插入到对 ID 具有唯一约束的表中,则使用 guids。这避免了必须强制客户端首先从服务器请求一个已发布的 ID。
这对于将大量对象类型存储在不同表中的对象工厂和系统也非常有用,您不希望任何 2 个对象具有相同的 ID。这使得缓存和清除模式更容易实现。
GUID 是“全局唯一标识符”。您可以在需要保证与其他所有标识符不同的标识符的任何地方使用它。
通常,您只需要一个值是“本地唯一的”——例如,数据库表中的主键标识只需与该表中的其他行不同,但可以与其他表中的 ID 相同. (这里不需要 GUID)
当您要定义的 ID 必须不同于其他人(不受您的控制)将要定义的 ID 时,通常使用 GUID。ActiveX 控件的接口标识符中的一个这样的位置。任何人都可以创建 ActiveX,但不知道其他人将使用哪些控件来使用它们——而且没有什么可以阻止每个人给他们的控件起相同的名称。GUID 使它们保持不同。
GUID 是时间(在非常小的几分之一秒内)(因此确保与之前或之后定义的任何 GUID 不同)和定义您的位置的数字(有时取自网卡的 MAC 地址)的组合(因此可以确保与其他人现在定义的任何其他 GUID 不同)。
它们有时也称为 UUID(通用唯一 ID)。
除了所有其他答案,这里是一个在线 GUID 生成器:
什么是 GUID?
GUID(或 UUID)是“全局唯一标识符”(或“通用唯一标识符”)的首字母缩写词。它是一个 128 位整数,用于标识资源。GUID 一词通常由使用 Microsoft 技术的开发人员使用,而 UUID 则在其他任何地方使用。
GUID 有多独特?
128 位足够大,生成算法也足够独特,如果在 1 年内每秒生成 1,0000,000,000 个 GUID,则重复的概率仅为 50%。或者,如果地球上的每个人都生成了 600,000,000 个 GUID,那么重复的概率只有 50%。
如何使用 GUID?
GUID 在软件开发中用作数据库键、组件标识符或几乎任何其他需要真正唯一标识符的地方。GUID 还用于标识 COM 编程中的所有接口和对象。
GUID 是“全球唯一 ID”。也称为 UUID(通用唯一 ID)。
它基本上是以某种方式生成的 128 位数字(参见 RFC 4112 http://www.ietf.org/rfc/rfc4122.txt),几乎不可能生成重复项。这样,我可以生成 GUID,而无需某些第三方组织将它们提供给我以确保它们是唯一的。
GUID 的一种广泛使用是作为 Windows 上的 COM 实体(类、类型库、接口等)的标识符。使用 GUID,开发人员可以构建他们的 COM 组件,而无需前往 Microsoft 获取唯一标识符。尽管识别 COM 实体是 GUID 的主要用途,但它们用于许多需要唯一标识符的事情。一些开发人员将为数据库记录生成 GUID,以便为它们提供一个可以使用的 ID,即使它们在许多不同的数据库中必须是唯一的。
通常,您可以将 GUID 视为任何人都可以随时生成的序列号,并且他们会知道该序列号是唯一的。
其他获取唯一标识符的方法包括获取域名。为了确保域名的唯一性,您必须从某个组织(最终由 ICANN 管理)获得它。
因为 GUID 可能很笨拙(从人类可读的角度来看,它们是一串十六进制数字,通常像这样分组:aaaaaaaa-bbbb-cccc-dddd-ffffffffffff),一些需要跨不同组织的唯一名称的命名空间使用另一种方案(通常基于互联网域名)。
因此,按照约定,Java 包的命名空间以组织的域名(颠倒)开头,后跟以某种组织特定方式确定的名称。例如,一个 Java 包可能被命名为:
com.example.jpackage
这意味着处理名称冲突成为每个组织的责任。
XML 命名空间也以类似的方式变得独特——按照惯例,创建 XML 命名空间的人应该将其置于其控制下的注册域名“下方”。例如:
xmlns="http://www.w3.org/1999/xhtml"
管理唯一 ID 的另一种方式是以太网 MAC 地址。制造以太网卡的公司必须获得 IEEE 分配给他们的一组地址(我认为是 IEEE)。在这种情况下,该方案运行良好,即使制造商搞砸并发行具有重复 MAC 地址的卡,只要这些卡不在同一个子网中,一切仍然可以正常工作,因为超出子网,只有 IP地址用于路由数据包。尽管 MAC 地址的其他一些用途可能会受到影响 - 生成 GUID 的算法之一使用 MAC 地址作为一个参数。这种 GUID 生成方法不再被广泛使用,因为它被认为是一种隐私威胁。
Microsoft 为 Windows 9x 中的“VxD”驱动程序提供的 ID 是一种无法很好地提出唯一标识符的方案示例。第三方 VxD 驱动程序的开发人员应该要求 Microsoft 提供一组 ID,以用于第三方编写的任何驱动程序。这样,Microsoft 可以确保没有重复的 ID。不幸的是,许多驱动程序编写者从不打扰,只是使用他们用作起点的示例 VxD 中的任何 ID。我不确定这会造成多大的麻烦——我不认为 VxD ID 唯一性是绝对必要的,但它可能会影响某些 API 中的某些功能。
GUID 或 UUID(全局与通用)唯一标识符是一个唯一 ID :) 当您需要生成真正独特的机器时,有一些库可以为您提供。
有关详细信息,请参阅wikipedia 上的 GUID。
至于何时不需要 GUID,是当您控制的计数器(一种或另一种方式,如 SERIAL SQL 类型或序列)增加时。索引“文本”值(文本形式的 GUID)或 128 位二进制值(GUID)比整数要昂贵得多。
有人说它们在概念上是 128 位随机值,这基本上是正确的,但是对UUID(GUID 通常指微软的 UUID 实现)做了一些阅读,我看到有几个不同的 UUID 版本,其中大部分实际上并不是随机的。因此,可以为机器(或其他东西)生成 UUID,并能够可靠地重复该过程以获得相同的 UUID,这对于某些应用程序很重要。
对我来说,更容易将它们视为简单的“128 位随机值”。它们本质上就是这样。有一些算法可以在您的 GUID 的几位数字中包含一些信息(因此随机部分变得更小),但它们仍然是相当大的几乎随机值。
由于它们非常大,因此极不可能生成两个相同的 GUID。出于所有实际目的,曾经生成的每个 GUID 在世界上都是独一无二的。
我会让你弄清楚在哪里使用它们,但其他答案已经有一些例子。让想象力自由驰骋。:)
由于生成它们背后的所有数学运算,可能很难理解。将其视为一个唯一的 ID。如果您碰巧使用 C# 或许多其他应用程序或网站之一,您可以让 Visual Studio 为您生成一个,或者 .NET。它们被认为是独一无二的,因为您会看到两次相同的机会非常小,因此不值得考虑。
128 位全球唯一 ID。您可以从现在到日落生成 GUID,而且您永远不会两次生成相同的 GUID,其他人也不会。它们与 COM 一起使用很多。
例如,您将它们用于什么用途,我们将它们用于我们的一种产品中。我们的用户可以在各种设备上生成类别和卡片。我们希望确保不会将在一台设备上创建的类别与在另一台设备上创建的类别混淆,因此无论是谁生成、生成它们以及何时生成它们,ID 都是唯一的,这一点很重要。所以我们使用 GUID(实际上我们使用我们自己的方案,使用 64 位数字,但它们类似于 GUID)。
几年前,我在 ACD 呼叫中心系统上工作,我们希望将来自多个呼叫处理器的呼叫详细记录收集到一个数据库中。我在 MS SQL 中设置了一个列来为数据库键生成一个 GUID,而不是使用系统生成的顺序 ID(身份列)。那时,这需要将默认值设置为 NewID(或在代码中生成它,但 NewID() 函数更安全)。当然,钥匙的价值很大可能会引起一些人的注意,但我宁愿放弃空间也不愿冒碰撞的风险。
我没有看到任何人使用 GUID 作为数据库键的地址,所以我认为知道你也可以这样做可能会有所帮助。
GUID 代表“全球唯一标识符”,当您想要拥有一个全球唯一标识符时可以使用它。
例如,在 RSS 提要中,提要中的每个项目都应该有一个 GUID。这样,提要阅读器软件可以跟踪您是否已阅读该项目。如果没有 GUID,就无法分辨。
GUID 与数据库 ID 之类的不同之处在于,无论是谁创建了一个对象——你、我、街上的那个人——我们的 GUID总是不同的。使用 GUID 应该没有冲突。
您还会看到术语 UUID,它代表“通用唯一标识符”。两者本质上没有区别。UUID 是更合适的术语。GUID 是 Microsoft 使用的术语。
如果您需要生成在应用程序的整个生命周期内必须唯一的标识符,则使用 GUID。
假设您有一个带有会话的服务器,如果您给每个会话一个 GUID,您可以确定它对于您的服务器创建的每个会话都是唯一的。这对于跟踪错误很有用。
我发现的一个特别有用的 GUID 应用程序是使用它们来跟踪 Web 应用程序中的唯一访问者,其中访问者是匿名的(即未登录或注册)。
关于 GUID的Wikipedia文章非常清楚它们的用途——也许改写你的问题会有所帮助——你需要 GUID 做什么?