Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Identify All the Things With UUIDs! (Dutch PHP 2016)

Identify All the Things With UUIDs! (Dutch PHP 2016)

Universally unique identifiers (UUIDs) are a fun and exciting way to identify things. We can issue UUIDs forever and never run out; they're practically unique! Join this whirlwind adventure in search of the perfect identifier to find out why UUIDs might be good for your projects. Along the way, you'll learn what is a UUID, the various types of UUIDs, pros and cons of using UUIDs, and how to use the ramsey/uuid library. Advanced and little-known features of ramsey/uuid will be covered.

Ben Ramsey

June 24, 2016
Tweet

More Decks by Ben Ramsey

Other Decks in Programming

Transcript

  1. universally unique There are 1632 possible UUIDs “only after generating

    1 billion UUIDs every second for the next 100 years, the probability of creating just one duplicate would be about 50%” — Wikipedia, UUID
  2. 73 926 269 841 798 498 179 266 328 839

    241 479 317 Unsigned 128-bit integer
  3. HI, I’M BEN. I’m a web craftsman, author, and speaker.

    I build a platform for professional photographers at ShootProof. I enjoy APIs, open source software, organizing user groups, good beer, and spending time with my family. Nashville, TN is my home. ▸ Zend PHP Certification Study Guide ▸ Nashville PHP & Atlanta PHP user groups ▸ array_column() ▸ league/oauth2-client ▸ ramsey/uuid
  4. for ($i = 0; $i < 5; $i++) { echo

    Uuid::uuid1()->toString(); echo "\n"; }
  5. for ($i = 0; $i < 5; $i++) { echo

    Uuid::uuid4()->toString(); echo "\n"; }
  6. Database Considerations • Some databases have UUID as native type

    • MySQL does not • InnoDB uses PK in all secondary keys; if PK is big (CHAR(36)), then all keys will be huge • InnoDB stores data in PK order; if UUID is PK and not sequential, then inserts are scattered
  7. Database Solutions • Use binary instead of string UUID •

    CHAR(16) • $uuid->getBytes() • Pull request #118: Codec to store UUID in an optimized way for InnoDB • Read Percona blog post “Store UUID in an optimized way”
  8. COMB • Combined random UUID/timestamp • Replaces the least significant

    bytes of the node field with the current timestamp • Tries to compensate for the reduced clustering in database indexes
  9. More Customization In fact, you’re able to customize ramsey/uuid in

    any way you need by using interfaces and injecting dependencies in the factory: - Generators - Codecs - Converters - Providers
  10. Cons • Takes up much more DB space than integer

    • By default (and spec) not sequential • Decreases database performance • Can’t use ORDER BY • Ugly in URLs
  11. Pros • Unique everywhere • Easily able to merge recordsets

    from multiple sources • Easy distribution of databases across multiple servers • May be generated anywhere, independently
  12. THANK YOU. ANY QUESTIONS? If you want to talk more,

    feel free to contact me. benramsey.com @ramsey github.com/ramsey [email protected] Identify All the Things With UUIDs Copyright © 2016 Ben Ramsey This work is licensed under Creative Commons Attribution-ShareAlike 4.0 International. For uses not covered under this license, please contact the author. Ramsey, Ben. “Identify All the Things With UUIDs.” Dutch PHP Conference. RAI Amsterdam Convention Centre, Amsterdam. 24 Jun. 2016. Conference presentation. This presentation was created using Keynote. The text is set in Chunk Five and Helvetica Neue. The source code is set in Menlo. The iconography is provided by Font Awesome. Unless otherwise noted, all photographs are used by permission under a Creative Commons license. Please refer to the Photo Credits slide for more information. Ŏ joind.in/talk/11781
  13. Photo Credits 1. “38-365 Fingerprint” by Bram Cymet 2. “Baby

    Feet” by Katelyn Kenderdine 3. “Random” by Vladimer Shioshvili 4. “Hello My Name Is.... 221/365” by Robert Occhialini 5. “Curvy Road Ahead” by Kit Ng 6. “Security door” by reynermedia 7. “Hello! My Name Is JEDi.” by Tyrone J Moore 8. “Mr Anatomini” by clement127 9. “Everything” by Dan Dvorscak 10. “thinker” by Fredrik Rubensson 1 2 3 4 5 6 7 8 9 10