GUID到底是什么?为什么以及我应该在哪里使用它?
我在很多地方和维基百科中都看到了对GUID的引用,但并不是很清楚该在哪里使用它。如果有人能回答这个问题,那就太好了。谢谢
发布于 2008-12-16 16:11:28
GUID是“全局唯一的IDentifier”。只要你需要一个保证不同的标识符,你就可以在任何地方使用它。
通常,您只需要一个值是“本地唯一的”--例如,数据库表中的主键标识只需要与该表中的其他行不同,但可以与其他表中的ID相同。(这里不需要GUID )
当您要定义的ID必须不同于其他人(在您的控制范围之外)将定义的ID时,通常使用GUID。在ActiveX控件的接口标识符中就有一个这样的位置。任何人都可以创建一个ActiveX,但不知道其他人会将它们与什么控件一起使用-而且没有什么可以阻止每个人给他们的控件起相同的名称。GUID使它们保持不同。
GUID是时间(以非常小的一秒为单位)(因此它肯定不同于之前或以后定义的任何GUID )和定义您的位置(有时取自您的网卡的MAC地址)的数字(因此它肯定不同于其他人现在定义的任何其他GUID)的组合。
它们有时也称为UUID(通用唯一ID)。
发布于 2008-12-16 16:41:27
GUID是“全局唯一ID”。也称为UUID (通用唯一ID)。
它基本上是一个128位的数字,其生成方式(参见RFC4112 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),一些在不同组织中需要唯一名称的命名空间使用另一种方案(通常基于Internet域名)。
因此,按照惯例,Java包的名称空间以组织的域名(颠倒过来)开头,后跟以特定于组织的方式确定的名称。例如,Java包可以命名为:
com.example.jpackage
这意味着处理名称冲突成为每个组织的责任。
XML名称空间也是以类似的方式唯一的-按照惯例,创建XML名称空间的人应该将其“置于”他们控制下的注册域名之下。例如:
xmlns="http://www.w3.org/1999/xhtml"
管理唯一ID的另一种方式是以太网MAC地址。制造以太网卡的公司必须获得IEEE分配给它们的地址块(我认为是IEEE)。在这种情况下,该方案工作得很好,即使制造商搞砸了,并发行了具有重复MAC地址的卡,只要这些卡不在同一子网上,事情仍然可以正常工作,因为在子网之外,只有IP地址用于路由数据包。尽管MAC地址的其他一些用途可能会受到影响,但生成GUID的算法之一使用MAC地址作为一个参数。这种GUID生成方法不再被广泛使用,因为它被认为是对隐私的威胁。
微软为Windows9x中的“VxD”驱动程序提供的ID就是一个不太管用的唯一标识符方案的一个例子。第三方VxD驱动程序的开发人员应该要求微软提供一组ID,用于第三方编写的任何驱动程序。这样,微软就可以确保不会有重复的ID。不幸的是,许多驱动程序编写人员从不费心,只是简单地使用他们用作起点的示例VxD中的任何ID。我不确定这造成了多大的麻烦-我不认为VxD ID唯一性是绝对必要的,但它可能会影响一些API中的某些功能。
发布于 2008-12-16 16:11:59
GUID或UUID (全局或通用)唯一的IDentifier是一个唯一的ID :)当你需要一些真正独特的机器生成的东西时,有一些库可以为你提供一个。
详情请参见GUID on wikipedia。
至于何时不需要GUID,是指您控制的计数器(以某种方式,如串行SQL类型或序列)递增。索引“文本”值(文本形式的GUID )或128位二进制值(GUID )要比整数开销大得多。
https://stackoverflow.com/questions/371762
复制相似问题