什么是GUID? 为什么和在哪里我应该使用它?
什么是GUID? 为什么和在哪里我应该使用它?
我已经在很多地方和wikipedia中看到了GUID的引用,但是告诉你在哪里使用它并不是很清楚。 如果有人能回答这个问题,那就太好了。 谢谢
GUID在技术上代表全球唯一的标识符。 实际上,它是一个128位的结构, 不可能重复或产生冲突。 如果你做math,价值的领域是在十几亿 。
当你有多个独立的系统或客户端生成ID需要唯一的时候使用GUID。
例如,如果我有5个客户端应用程序创build事务数据并将其插入到对该ID具有唯一约束的表中,则使用guid。 这样可以防止强制客户端首先从服务器请求发出的ID。
这也适用于对象工厂和系统,这些对象工厂和系统有不同的对象types存储在不同的表中,您不希望任何两个对象具有相同的ID。 这使caching和清理模式更容易实现。
GUID是“全球唯一标识符”。 您可以在任何需要使用标识符的地方使用该标识符。
通常情况下,只需要一个值为“本地唯一”(例如,数据库表中的主键身份)只需要与该表中的其他行不同,但可以与其他表中的ID相同。 (这里不需要GUID)
当您定义的ID必须与其他人(不受控制)定义的ID不同时,通常使用GUID。 ActiveX控件的接口标识符中的一个这样的地方。 任何人都可以创build一个ActiveX,而不知道别人将使用哪个控件—而且没有什么能够阻止每个人使用相同的名字。 GUID保持不同。
GUID是时间的组合(只有很小的一秒钟)(因此它可以保证与之前或之后定义的任何GUID不同)和一个定义你的位置的数字(有时来自你的网卡的MAC地址) (所以它可以保证与其他人现在定义的其他GUID不同)。
它们有时也被称为UUID(通用唯一ID)。
除了所有其他的答案,这里是一个在线GUID生成器 :
什么是GUID?
GUID(或UUID)是“全局唯一标识符”(或“通用唯一标识符”)的首字母缩写词。 这是一个128位的整数,用于识别资源。 术语GUID通常由使用Microsoft技术的开发人员使用,而UUID在其他地方使用。
GUID有多独特?
128位是足够大的,并且生成algorithm是足够独特的,如果每年生成1000000000个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实体的标识符(类,types库,接口等)。 使用GUID,开发人员可以构build他们的COM组件,而不必去微软得到一个唯一的标识符。 尽pipe识别COM实体是GUID的主要用途,但是它们被用于许多需要唯一标识符的事物。 有些开发人员会为数据库logging生成GUID,为他们提供一个可以使用的ID,即使他们在许多不同的数据库中必须是唯一的。
通常情况下,您可以将GUID看作任何人随时可以生成的序列号,他们会知道序列号是唯一的。
其他获取唯一标识符的方法包括获取域名。 为确保域名的唯一性,您必须从某个组织(最终由ICANNpipe理)获取域名。
因为GUID可能很笨拙(从人们可读的angular度来看,它们是一串hex数字,通常是这样分组的:aaaaaaaa-bbbb-cccc-dddd-ffffffffffff),在不同组织中需要唯一名称的一些命名空间使用另一种scheme通常基于互联网域名)。
所以,按照惯例,Java包的命名空间是以机构的域名(反转的)开头的,后面跟着一些特定组织规定的名字。 例如,一个Java包可能被命名为:
com.example.jpackage
这意味着处理名称冲突成为每个组织的责任。
XML名称空间也以类似的方式变得独一无二 – 按照惯例,创buildXML名字空间的人应该在其控制下的“注册域名”下面。 例如:
xmlns="http://www.w3.org/1999/xhtml"
以太网MAC地址是pipe理唯一ID的另一种方式。 一家制造以太网卡的公司必须得到由IEEE(我认为是IEEE)分配给他们的地址块。 在这种情况下,该scheme工作得很好,即使制造商拧紧并发出具有重复MAC地址的卡,只要这些卡不在同一个子网上,情况仍然可以正常工作,因为在子网之外,只有IP地址用于路由数据包。 尽pipe可能会影响MAC地址的其他用途 – 生成GUID的一种algorithm将MAC地址用作一个参数。 这种GUID生成方法不再被广泛使用,因为它被认为是隐私威胁。
微软为Windows 9x中的“VxD”驱动程序提供了一个ID,这个scheme的一个例子就是提供了一些不能很好地工作的唯一标识符。 第三方VxD驱动程序的开发者应该要求微软为第三方写的任何驱动程序使用一组ID。 这样,微软可以确保没有重复的ID。 不幸的是,许多驱动程序作者从来没有打扰过,只是简单地使用了以VxD为例的任何ID。 我不确定这会造成多大的麻烦 – 我不认为VxD ID的唯一性是绝对必要的,但是这可能会影响到某些API的某些function。
GUID或UUID(全局vs全局)唯一标识符是一个唯一的ID :)当你需要一些真正独特的机器生成的时候,有一些库可以让你得到一个。
有关详细信息,请参阅wikipedia上的GUID 。
至于什么时候你不需要一个GUID,那就是当你控制的一个计数器(一种或另一种,如SERIAL SQLtypes或序列)被增加的时候。 索引一个“文本”值(文本forms的GUID)或一个128位二进制值(一个GUID是)比一个整数要贵得多。
有人说他们是概念上的128位随机值,这是基本上是真实的,但已经做了一些读UUID (GUID通常是指微软的UUID的实现),我看到有几个不同的UUID版本,其中大部分实际上并不是随机的。 所以有可能为一台机器(或别的东西)生成一个UUID,并且能够可靠地重复这个过程来获得相同的UUID,这对于某些应用是很重要的。
对我来说,将它们简单地视为“128位随机值”更容易。 这基本上是他们是什么。 有一些algorithm可以在你的GUID的几位数字中包含一些信息(因此随机部分会变小一些),但是它们仍然是非常大的随机值。
由于它们非常大,所以两个相同的GUID是不太可能产生的。 实际上,每个GUID都是世界上唯一的。
我会把它留给你来弄清楚在哪里使用它们,但其他答案已经有一些例子。 让想象力自由驰骋。 🙂
由于生成它们后面的所有math,可能是一件很难理解的事情。 把它想成一个独特的ID。 您可以让Visual Studio为您生成一个,或者如果您正在使用C#或其他许多应用程序或网站之一,则可以使用.NET。 他们被认为是独一无二的,因为有这样一个愚蠢的小机会,你会看到相同的两次,这是不值得考虑。
128位全局唯一ID。 您可以从现在开始生成GUID直到日落,而且您永远不会生成两次相同的GUID,其他任何人都不会生成相同的GUID。 他们用于COM很多。
例如,您可以使用它们作为我们的产品之一。 我们的用户可以在各种设备上生成类别和卡片。 我们希望确保不会将在一个设备上创build的类别与在另一个设备上创build的类别混淆,因此无论是由哪个设备创build它们,生成它们的位置以及生成它们的时间,这些ID都是唯一的。 所以我们使用GUID(实际上我们使用我们自己的scheme使用64位数字,但它们类似于GUID)。
GUID =全球唯一标识符。
当您想要在全局上下文中唯一标识某些内容时使用它。
这个发生器可以很方便。
GUID代表“全局唯一标识符”,当你想拥有全球唯一标识符时,你使用它。
例如,在RSS提要中,您应该为提要中的每个项目设置一个GUID。 这样,供稿阅读器软件可以跟踪您是否阅读过该项目。 没有一个GUID,这是不可能的。
一个GUID与数据库ID之类的东西不同,不pipe是谁创build了一个对象 – 你,我,这个人在街上 – 我们的GUID 总是不一样的。 使用GUID不应该有冲突。
您还会看到术语UUID,代表“通用唯一标识符”。 两者基本上没有区别。 UUID是更合适的术语。 GUID是Microsoft使用的术语。
如果您需要在应用程序的整个生命周期中生成一个需要唯一的标识符,则使用GUID。
想象一下你有一个带会话的服务器,如果你给每个会话一个GUID,你肯定会对你服务器创build的每个会话都是唯一的。 这对追踪错误很有用。
我发现一个特别有用的GUID应用是使用它们来跟踪访问者匿名(即未login或注册)的webapps中的唯一访问者。
几年前,我曾在一家ACD呼叫中心系统工作,希望将来自多个呼叫处理器的呼叫细节logging收集到一个数据库中。 我在MS SQL中设置一个列来为数据库键生成GUID,而不是使用系统生成的顺序ID(标识列)。 当时,这需要将默认值设置为NewID(或者在代码中生成它,但是NewID()函数更安全)。 当然,对于一把钥匙来说,大的价值可能会引起一些眉毛,但我宁愿放弃这个空间而不愿冒险。
我没有看到任何人使用GUID作为数据库密钥的地址,所以我认为这可能有助于知道你也可以这样做。
关于GUID的维基百科文章在它们的用途上非常清楚 – 也许用你的问题来重新描述会有帮助 – 你需要什么GUID?