GUID究竟是什么?为什么以及在哪里使用它?
我在很多地方看过GUID的引用,在维基百科中,
但是告诉你在哪里使用它并不是很清楚。
如果有人能回答这个问题,那就太好了。
感谢
答案 0 :(得分:87)
GUID技术上代表全球唯一标识符。实际上,它是一个128位结构,不太可能重复或产生碰撞。如果您进行数学计算,则值域位于undecillions。
当您有多个独立系统或客户端生成需要唯一的ID时,请使用guids。
例如,如果我有5个客户端应用程序创建并将事务数据插入到对ID具有唯一约束的表中,则使用guids。这可以防止必须首先强制客户端从服务器请求已发布的ID。
对于具有存储在不同表中的大量对象类型的对象工厂和系统,这也是很好的,在这些表中您不希望任何2个对象具有相同的ID。这使得缓存和清理模式更容易实现。
答案 1 :(得分:20)
GUID是“全球唯一标识符”。您可以在任何需要保证与其他标识符不同的标识符的地方使用它。
通常,您只需要一个“本地唯一”的值 - 例如,数据库表中的主键标识只需要与该表中的其他行不同,但可以与ID相同在其他表中。 (这里不需要GUID)
GUID通常用于定义一个ID,该ID必须与其他人(您的控件之外)定义的ID不同。 ActiveX控件上的接口标识符中的一个这样的位置。任何人都可以创建一个ActiveX,而不知道有人将使用它们的其他控件---并且没有什么可以阻止每个人给他们的控件同名。 GUID使它们保持不同。
GUID是时间的组合(非常小的一秒)(因此它确保与之前或之后定义的任何GUID不同),以及定义您的位置的数字(有时取自您的MAC地址)网卡)(所以它确保与其他人现在定义的任何其他GUID不同)。
它们有时也称为UUID(通用唯一ID)。
答案 2 :(得分:14)
除了所有其他答案外,还有一个在线GUID生成器:
什么是GUID?
GUID(或UUID)是首字母缩写词 '全球唯一标识符'(或 '通用唯一标识符')。它 是一个128位整数用于 识别资源。 GUID一词是 通常由开发人员使用 与微软技术同时 UUID在其他地方使用。
GUID有多独特?
128位是足够大的 生成算法足够独特 如果每个1,0000,000,000 GUID 第二次产生了1年了 重复的概率是 只有50%。或者如果地球上的每一个人 在那里生成了600,000,000个GUID 只有50%的概率 重复。
如何使用GUID?
GUID用于软件开发 作为数据库键,组件 标识符,或几乎任何地方 否则一个真正独特的标识符是 需要。 GUID也习惯了 识别所有接口和对象 COM编程。
答案 3 :(得分:11)
GUID是“全球唯一ID”。也称为UUID(通用唯一ID)。
它基本上是以某种方式生成的128位数(参见RFC 4112 http://www.ietf.org/rfc/rfc4122.txt),这使得几乎不可能生成重复项。通过这种方式,我可以在没有某些第三方组织向我提供GUID的情况下生成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,事情仍然可以正常工作address用于路由数据包。虽然可能会影响MAC地址的其他一些用途 - 但生成GUID的算法之一使用MAC地址作为一个参数。此GUID生成方法不再广泛使用,因为它被视为隐私威胁。
微软为Windows 9x中的“VxD”驱动程序提供了ID,提出了一个不能很好地运行的唯一标识符的方案。第三方VxD驱动程序的开发人员应该向Microsoft询问一组用于第三方编写的驱动程序的ID。这样,Microsoft可以确保没有重复的ID。不幸的是,许多驱动程序编写者从不打扰,只是使用他们用作起点的示例VxD中的任何ID。我不确定这引起了多少麻烦 - 我不认为VxD ID的唯一性是绝对必要的,但它可能会影响某些API中的某些功能。
答案 4 :(得分:9)
GUID或UUID(全局与普遍)唯一的IDentifier是一个唯一的ID :)当你需要一些非常独特的机器生成时,有一些库可以让你获得一个。
有关详细信息,请参阅GUID on wikipedia。
当您不需要GUID时,您控制的计数器(以某种方式,如SERIAL SQL类型或序列)会增加。索引“文本”值(文本形式的GUID)或128位二进制值(GUID为)的索引远比整数更昂贵。
答案 5 :(得分:5)
有人说它们在概念上是128位随机值,这基本上是正确的,但是在UUID上做了一点读(GUID通常是指微软的UUID实现),我看到有几个不同的UUID版本,其中大多数实际上并不是随机的。因此,可以为机器(或其他)生成UUID,并能够可靠地重复该过程以获得相同的UUID,这对于某些应用程序非常重要。
答案 6 :(得分:4)
对我而言,将它们简单地视为“128位随机值”更容易。这基本上就是它们。有一些算法可以在GUID的几个数字中包含一些信息(因此随机部分会变得更小),但它们仍然是相当大的几乎随机的值。
由于它们非常大,因此极不太可能生成两个相同的GUID。出于所有实际目的,每个生成的GUID在世界上都是独一无二的。
我会留给你找出使用它们的地方,但其他答案已经有了一些例子。让想象力自由驰骋。 :)
答案 7 :(得分:3)
由于生成它们背后的所有数学运算,因此难以理解。把它想象成一个独特的身份。您可以让Visual Studio为您生成一个,或者如果您正在使用C#或许多其他应用程序或网站之一,则可以使用.NET。它们被认为是独一无二的,因为有一个非常小的机会,你会看到相同的两次,不值得考虑。
答案 8 :(得分:3)
128位全局唯一ID。您可以从现在开始直到日落生成GUID,并且您永远不会生成两次相同的GUID,其他人也不会生成。它们与COM一起使用很多。
至于您将使用它们的例子,我们在其中一个产品中使用它们。我们的用户可以在各种设备上生成类别和卡片。我们希望确保不会将在一个设备上创建的类别与在不同设备上创建的类别混淆,因此无论谁生成它们,生成它们的何时以及何时生成它们,ID都是唯一的。所以我们使用GUID(实际上我们使用我们自己的方案使用64位数字,但它们与GUID类似)。
答案 9 :(得分:3)
几年前,我在ACD呼叫中心系统工作,我们希望将来自多个呼叫处理器的呼叫详细记录收集到一个数据库中。我在MS SQL中设置了一个列来生成数据库密钥的GUID,而不是使用系统生成的顺序ID(标识列)。那时,这需要将默认值设置为NewID(或在代码中生成它,但NewID()函数更安全)。当然,拥有一把钥匙的大价值可能会引起一些人的注意,但我宁愿放弃这个空间而不是冒险。
我没有看到任何人使用GUID作为数据库密钥进行解决,因此我认为可能有助于了解您也可以这样做。
答案 10 :(得分:2)
答案 11 :(得分:2)
GUID代表“全球唯一标识符”,您可以在想要拥有全球唯一标识符时使用它。
例如,在RSS Feed中,您应该为Feed中的每个项目设置GUID。这样,提要阅读器软件可以跟踪您是否已阅读该项目。如果没有GUID,就无法分辨。
GUID与数据库ID的不同之处在于,无论是谁创建了一个对象 - 你,我,街头的人 - 我们的GUID 总是不同。使用GUID不应该发生冲突。
您还会看到术语UUID,它代表“通用唯一标识符”。两者之间基本没有区别。 UUID是更合适的术语。 GUID是Microsoft使用的术语。
答案 12 :(得分:2)
如果您需要生成在应用程序的整个生命周期内需要唯一的标识符,请使用GUID。
假设你有一个带有会话的服务器,如果你给每个会话一个GUID,你肯定它对你服务器创建的每个会话都是唯一的。这对于跟踪错误非常有用。
答案 13 :(得分:2)
我发现GUID的一个特别有用的应用是使用它们来跟踪访问者匿名(即未登录或注册)的webapps中的唯一访问者。
答案 14 :(得分:1)
关于GUID的Wikipedia文章非常清楚它们的用途 - 也许改写你的问题会有所帮助 - 你需要什么GUID?
答案 15 :(得分:0)