What exactly is GUID? Why and where I should use it?
I ve seen references to GUID in a lot of places, and in wikipedia,
but it is not very clear telling you where to use it.
If someone could answer this, it would be nice.
Thanks
GUID 技术上代表全局唯一标识符。实际上,它是一个128位的结构,不太可能重复或产生冲突。如果你算一下,它的值域在十非方。
在您有多個獨立系統或客戶端生成需要獨特的ID時,請使用guid。
例如,如果我有5个客户端应用程序创建并插入事务数据到一个有ID唯一约束的表中,则使用GUID。这可以避免强制客户端首先从服务器请求发行的ID。
这对于对象工厂和系统非常有用,这些系统在不同的表中存储了许多对象类型,您不希望任何两个对象具有相同的ID。这使得缓存和清理模式更容易实现。
GUID是“全球唯一标识符”。您可以在需要与其他标识符不同的任何地方使用它。
通常情况下,你只需要一个值是“局部唯一”的 -- 例如,在数据库表中,主键标识仅需要与该表中的其他行不同,但可以与其他表中的ID相同。(此处不需要GUID)
GUID通常用于定义一个ID,该ID必须与某个其他人(在您的控制范围之外)定义的ID不同。在ActiveX控件中,界面标识符就是这样一个地方。任何人都可以创建一个ActiveX控件,并且不知道其他人将与之一起使用的控件是哪个,而且没有任何方法可以阻止每个人都给自己的控件命名相同的名称。GUID可以保持它们不同。
GUID是时间(以非常小的秒分数表示)和定义您位置的数字(有时从您的网络卡MAC地址获取)的组合(因此它保证与以前或以后定义的任何GUID不同),因此它保证与其他人现在定义的任何GUID都不同)。
它们有时也被称为UUID(全局唯一标识符)。
除了其他的回答之外,这里还有一个在线GUID生成器:
http://www.guidgenerator.com/ 的翻译为:生成全局唯一标识符的网站。
什么是GUID?
GUID (or UUID) is an acronym for Globally Unique Identifier (or Universally Unique Identifier ). It is a 128-bit integer number used to identify resources. The term GUID is generally used by developers working with Microsoft technologies, while UUID is used everywhere else.
GUID有多独特?
128-bits is big enough and the generation algorithm is unique enough that if 1,0000,000,000 GUIDs per second were generated for 1 year the probability of a duplicate would be only 50%. Or if every human on Earth generated 600,000,000 GUIDs there would only be a 50% probability of a duplicate.
GUIDs是如何使用的?
GUIDs are used in software development as database keys, component identifiers, or just about anywhere else a truly unique identifier is required. GUIDs are also used to identify all interfaces and objects in COM programming.
GUID是“全局唯一标识符”。也称为UUID(通用唯一标识符)。
这基本上是一个128位的数字,在生成方式(参见RFC 4112 http://www.ietf.org/rfc/rfc4122.txt)中几乎不可能生成重复的ID。这样,我可以生成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生成方法现在不再被广泛使用。
一个不太成功的方案来设计独一无二的标识符的例子是微软为Windows 9x中的VxD驱动程序提供的ID。第三方VxD驱动程序的开发者应该向微软请求一组ID来用于他们编写的任何驱动程序。这样,微软就能确保没有重复的ID。不幸的是,许多驱动程序编写者从未烦恼过这个问题,只是使用他们用作起点的示例VxD中的任何ID。我不确定这会造成多大麻烦 - 我认为VxD ID的独特性并不是绝对必要的,但它可能会影响一些API的功能。
GUID或UUID(全局vs通用)唯一标识符是一种唯一的ID :)当您需要生成机器生成的真正唯一标识符时,有库可以帮助您获取一个。
有关详细信息,请参见维基百科上的GUID。
关于何时不需要GUID,当您控制的计数器得到增加(通过某种方式,比如SERIAL SQL类型或序列)时,就不需要它了。对“文本”值(GUID的文本形式)或128位二进制值(GUID是其中之一)进行索引比整数费用要高得多。
有人说它们在概念上是128位随机值,大体上是正确的,但是在阅读一些关于UUID(全局唯一标识符)的资料后(GUID通常指Microsoft实现的UUID),我发现有几个不同的UUID版本,其中大多数实际上并不是随机的。因此,可以为一台机器(或其他东西)生成UUID,并能够可靠地重复该过程以获得相同的UUID,这对于某些应用程序非常重要。
对我来说,将它们简单地看作“128位随机值”更容易。本质上就是这样。有一些算法可以在您的GUID的几个数字中包含一点信息(因此,随机部分会变小一些),但它们仍然是非常大的几乎随机的值。
由于它们非常大,因此极其不可能生成两个相同的GUID。对于所有实际目的而言,每个生成的GUID在世界上都是唯一的。
我会把这个交给你来决定在哪里使用它们,但其他回答已经有了一些例子。让你的想象力发挥吧。 :)
由于生成它们背后涉及的所有数学运算,这可能是一个难以理解的事情。将其视为唯一的 ID。您可以让 Visual Studio 为您生成一个,或者如果您正在使用 C# 或其他许多应用程序或网站,则可以使用 .NET。它们被认为是独特的,因为您很难再次看到相同的东西,所以没必要考虑。
128位全局唯一标识符。您可以从现在开始一直生成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 = 全局唯一标识符。
当你想在全局上唯一地识别某个东西时,使用它。
这个生成器可能很方便。
GUID的维基百科文章非常清楚地说明了它们的用途-也许重新构述您的问题会有所帮助-您需要GUID做什么?
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding