rfc:uuid

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
rfc:uuid [2017/08/29 07:38] – Completed rejected features section fleshgrinderrfc:uuid [2017/09/22 13:28] (current) – external edit 127.0.0.1
Line 3: Line 3:
   * Date: 2017-05-25   * Date: 2017-05-25
   * Author: Richard Fussenegger, php@fleshgrinder.com   * Author: Richard Fussenegger, php@fleshgrinder.com
-  * Status: Under Discussion+  * Status: Declined
   * First Published at: http://wiki.php.net/rfc/uuid   * First Published at: http://wiki.php.net/rfc/uuid
  
Line 9: Line 9:
 Universally Unique Identifiers (UUIDs, also known as Globally Unique Identifiers [GUIDs]) are 128 bit integers that guarantee uniqueness across space and time. PHP currently provides the ''[[https://php.net/function.uniqid|uniqid]]'' function only, however, there are many flaws to it; as is apparent from the many warnings on the manual page. UUIDs are the natural answer to that problem. UUIDs are also gaining more attraction due to emerging technologies like streaming platforms (e.g. Kafka), or event sourcing applications, since uniqueness per record is of paramount importance. Depending on a central (locking) authority increases complexity and decreases throughput of such systems. Universally Unique Identifiers (UUIDs, also known as Globally Unique Identifiers [GUIDs]) are 128 bit integers that guarantee uniqueness across space and time. PHP currently provides the ''[[https://php.net/function.uniqid|uniqid]]'' function only, however, there are many flaws to it; as is apparent from the many warnings on the manual page. UUIDs are the natural answer to that problem. UUIDs are also gaining more attraction due to emerging technologies like streaming platforms (e.g. Kafka), or event sourcing applications, since uniqueness per record is of paramount importance. Depending on a central (locking) authority increases complexity and decreases throughput of such systems.
  
-UUIDs are defined and standardized in [[https://tools.ietf.org/html/rfc4122|RFC 4122]], but where effectively used long before in many systems. The algorithms that are involved are well understood and battle tested through ubiquitous software, like Microsoft’s Windows operating system, since almost 30 years. UUIDs are mainly used to assign identifiers to entities without requiring a central authority. They are thus particularly useful in distributed systems. They also allow very high allocation rates; up to 10 million per second per machine, if necessary. Please refer to [[https://en.wikipedia.org/wiki/Universally_unique_identifier|the Wikipedia article]] for more details about UUIDs, their flaws, as well as collision probabilities.+UUIDs are defined and standardized in [[https://tools.ietf.org/html/rfc4122|RFC 4122]], but were effectively used long before in many systems. The algorithms that are involved are well understood and battle tested through ubiquitous software, like Microsoft’s Windows operating system, since almost 30 years. UUIDs are mainly used to assign identifiers to entities without requiring a central authority. They are thus particularly useful in distributed systems. They also allow very high allocation rates; up to 10 million per second per machine, if necessary. Please refer to [[https://en.wikipedia.org/wiki/Universally_unique_identifier|the Wikipedia article]] for more details about UUIDs, their flaws, as well as collision probabilities.
  
 Most high-level programming languages provide support for UUIDs out-of-the-box. The following is a list of widely used languages and other software that provides support for UUIDs out-of-the-box: Most high-level programming languages provide support for UUIDs out-of-the-box. The following is a list of widely used languages and other software that provides support for UUIDs out-of-the-box:
Line 139: Line 139:
 Leading whitespace (spaces '' '' and tabs ''\t'') and opening braces (''{'') are ignored, so are trailing whitespace (spaces '' '' and tabs ''\t'') and closing braces (''}''). Hyphens (''-''), regardless of position, are always ignored. The method follows the [[https://en.wikipedia.org/wiki/Robustness_principle|robustness principle]] and is not meant for validation. The hexadecimal digits ''a'' through ''f'' are case insensitively parsed. Leading whitespace (spaces '' '' and tabs ''\t'') and opening braces (''{'') are ignored, so are trailing whitespace (spaces '' '' and tabs ''\t'') and closing braces (''}''). Hyphens (''-''), regardless of position, are always ignored. The method follows the [[https://en.wikipedia.org/wiki/Robustness_principle|robustness principle]] and is not meant for validation. The hexadecimal digits ''a'' through ''f'' are case insensitively parsed.
  
-A ''UUIDParseException'' is thrown is parsing of the input string fails.+A ''UUIDParseException'' is thrown if parsing of the input string fails.
  
 The named ''NamespaceDNS'', ''NamespaceOID'', ''NamespaceURL'', ''NamespaceX500'', and ''Nil'' constructors provide shortcuts for the predefined special UUIDs from RFC 4122. The named ''NamespaceDNS'', ''NamespaceOID'', ''NamespaceURL'', ''NamespaceX500'', and ''Nil'' constructors provide shortcuts for the predefined special UUIDs from RFC 4122.
Line 201: Line 201:
  
 ===== Proposed Voting Choices ===== ===== Proposed Voting Choices =====
-Simple 50%+1 majority vote.+Simple 50%+1 majority vote that ends on September 20, 2017. 
 + 
 +<doodle title="Add UUID value object to PHP standard module?" auth="fleshgrinder" voteType="single" closed="true"> 
 +   * Yes 
 +   * No 
 +</doodle>
  
 ===== Patches and Tests ===== ===== Patches and Tests =====
rfc/uuid.1503992331.txt.gz · Last modified: 2017/09/22 13:28 (external edit)