Artisanal Integers
neverendingbooks.org
neverendingbooks.org
They even used to make a beautiful yearly book of artisanal integer owners where you could look up people's artisanal integers by name, but sadly that book is now out of print.
I think we need an Artisanal Telephonic Integer Users' Bill of Rights to prevent this type of thing.
(Disclaimer: bad parody site from 2012 that I made very quickly, seems to still be working, but who knows.)
370372663736147970
A dashing integer as used by TomCruise.com on Twitter.
Guaranteed Authentic™: http://twitter.com/TomCruise/status/370372663736147970That may be authentic but hardly original.
You can download all of their integers for free. However all of them are already in use in mathematics. The smallest positive number not in use is 14972.
What's the betting they a) never spent five minutes looking for an efficient way to store UUIDs in the database b) never profiled/benchmarked the performance c) never came within three orders of magnitude of the level of overall service performance where the difference would be noticeable?
I thought UUIDs basically meant collisions would basically never happen though
But they're not artisanal. We need lovingly hand-crafted integers to go along with our double-tall-half-caff-extra-hot-mocha-lattes, nautical tattoos and neck scarves /s
Try an image search. Or watch Fiddle on the Roof :) https://youtu.be/7V2lxFWBqfI?t=2m49s
* At 128 bits they are larger than the majority of integer types. If you are using them as keys for large data sets this might be a concern, especially if you are using them in a clustering key in SQL Server or similar because every non-clustered index entry would include the larger value too (a table with four extra indexes: that is 40 extra bytes per row if you have a UUID clustering key over a 64-bit integer, 60 extra compared to a 32 bit integer - if you have many millions or billions of rows that is worth considering).
* Unless using some tweak such as SQL Server's sequential UUIDs they result in significant fragmentation (assuming a b+tree index structure with allocation and cleanup semantics similar to SQL Server, other DBs may manage things differently) due to their effective randomness, which wastes storage space & memory and can therefore impose greater IO and RAM load beyond that implied by the difference in size.
UUIDs are great when you genuinely need them, but often an integer type is much more efficient so refrain from using them where you don't have a specific need to.
The article and the services described are definitely satire though.
At 128 bits
And you'll probably end up handling them as 37-character strings, meaning you need 296 bits of space to store about 57 bits of data. And don't imagine you'll save any space by compressing it, as it's random and it'll compress terribly.Even without explicit support you could conceivably write a wrapper as part of your data access layer which packs them better (as 16 character strings assuming fixed 8-bits/character string types are truly 8-bit safe which is a fairly safe bet, or as a composite key of a number of integer columns).
Of course that doesn't stop people storing them as text instead anyway. Worse: I maintain a legacy system (with not time/budget to refactor and regression test something this fundamental) where many are stored as two-bytes-per-character text (SQL Server's nchar type) so that is 74 bytes (58 wasted per UUID column per row per table/index).
"Sequential" UUIDs like the special type implemented in MS SQL Server helps on the compression front (even when stored as proper binary types and not text) but it you are relying on compression for that you probably have other issues to deal with too...
If there is anyone reading this that is storing UUIDs as text, don't. They're 16 bytes, in hexadecimal with standardized hyphenation. Store 16 bytes. (Granted, that is still twice the storage of one of the offered integers,)