Great - thanks Dan.
On 3 Mar 2015 20:27, "danle...@gmail.com" <danle...@gmail.com> wrote:

> v1 UUID's are deterministically unique across both space and time.
> Random UUID's are random.  There is an (infinitesimally small chance of a
> duplicate).   To my knowledge, the reason random uuid's exist and are part
> of the RFC is that they are bone simple to implement, whereas v1 and v3/v5
> involve all kinds of non-obvious supporting facilities such as a monotonic
> clock or message-digest algorithm.
>
> V1 UUID's are uniquified in three different ways: a unique 6 byte node id
> is computed (the details are interesting, but refer to the source for
> more).  It is combined with a thread-safe, concurrent monotonic timestamp
> that is guaranteed to generate always increasing values regardless of clock
> precision or degree of concurrency.  Finally, a 2-byte "clock-seq" value is
> randomly seeded at load-time and incorporated into the calculation.  So,
> even if the system is restarted on the exact same node with the hardware
> clock for some reason adjusted backwards and it is attempted to generate
> another UUID at the exact "same" millisecond as one which had been
> generated prior, there is only a 1 in 65536 chance of issuing a duplicate.
>
> We do not use the MAC address actually.  clj-uuid/node.clj at master ·
> danlentz/clj-uuid
> <https://github.com/danlentz/clj-uuid/blob/master/src/clj_uuid/node.clj> has
> more detail, but this topic is specifically addressed by the RFC.  the
> following excerpt describes the node address calculation:
>
> ;;   "A better solution is to obtain a 47-bit cryptographic quality random
> ;;   number and use it as the low 47-bits of the Node-ID, with the least
> ;;   significant bit of the first octet of the Node-ID set to one.  This
> ;;   bit is the unicast/multicast bit, which will never be set in IEEE 802
> ;;   addresses obtained from network cards.  Hence, there can never be a
> ;;   conflict between UUID's generated by machines with and without network
> ;;   cards."
> ;;    . . .
> ;;    . . .
> ;;   "In addition, items such as the computer's name and the name of the
> ;;   operating system, while not strictly speaking random, will help
> ;;   differentiate the results from those obtained by other systems...
> ;;   ... A generic approach... IS TO ACCUMULATE AS MANY SOURCES AS POSSIBLE
> ;;   INTO A BUFFER, USE A MESSAGE DIGEST SUCH AS MD5 OR SHA1, TAKE AN
> ;;   ARBITRARY 6 BYTES FROM THE HASH VALUE, AND SET THE MULTICAST BIT
> ;;   AS DESCRIBED ABOVE."
> ;;
> ;;     -- [RFC4122:4.5 "Node IDs that do not Identify the Host"]
>
> If there are any good reasons why one should pay 10 times the cost to
> generate a UUID randomly, I'd like to hear them.
>
>
>
> On Tuesday, March 3, 2015 at 3:11:23 PM UTC-5, Colin Yates wrote:
>>
>> Are v1 as "unique" as randomUUID()?
>>  On 3 Mar 2015 20:08, "danl...@gmail.com" <danl...@gmail.com> wrote:
>>
>>> PS.  We are now TEN TIMES faster, so it is a lot easier to compute that
>>> percentage:
>>>
>>> #'uuid/v1:                    201 nanoseconds
>>> #'java.util.UUID/randomUUID: 2012 nanoseconds
>>>
>>>
>>> Best,
>>> Dan
>>>
>>>
>>> On Tuesday, March 3, 2015 at 3:06:35 PM UTC-5, danl...@gmail.com wrote:
>>>>
>>>> I invoked "engineer's privilege" to quote the number very
>>>> conservatively.  In one of the later episodes, didn't Scotty confide that
>>>> the Enterprise actually went up to warp 11, he just never told anyone? :)
>>>>
>>>> Actually, you are right -- I noticed it after I hit "send".  As you can
>>>> tell, the relative performance number has been a little bit of a moving
>>>> target as things improved quickly and I grabbed the number from a little
>>>> too far back in the REPL.
>>>>
>>>> Thanks Jacob.  I really do hope this is a library that people will find
>>>> modestly useful.
>>>>
>>>>
>>>>
>>>> On Tuesday, March 3, 2015 at 2:45:38 PM UTC-5, Jacob Strength wrote:
>>>>>
>>>>> That is pretty amazing, I'll have to remember this library next time I
>>>>> need to use UUID's.
>>>>> Also I think you meant 450% faster.
>>>>>
>>>>> On Sunday, March 1, 2015 at 5:35:16 PM UTC-7, danl...@gmail.com wrote:
>>>>>>
>>>>>> Ok, for anyone following my adventures optimizing clj-uuid, I've
>>>>>> gotten another substantial win.
>>>>>> Check it out:    http://danlentz.github.io/clj-uuid
>>>>>>
>>>>>> #'uuid/v1:                    443 nanoseconds
>>>>>> #'java.util.UUID/randomUUID: 2012 nanoseconds
>>>>>>
>>>>>> Also, the test suite has much greater coverage with individual tests
>>>>>> for each v1, v,3, v4, v5 uuid version.
>>>>>> And, finally, there more interesting notes about some of the esoteric
>>>>>> details of the node-id representation
>>>>>> and the way it is calculated to disambiguate it from any legal 802
>>>>>> MAC hardware address.  And more.... ;)
>>>>>>
>>>>>>
>>>>>> ============================================================
>>>>>> ==========
>>>>>>
>>>>>> user> (criterium/bench (uuid/v1))
>>>>>>
>>>>>> Evaluation count: 139356300 in 60 samples of 2322605 calls.
>>>>>> Execution time mean: 443.707611 ns
>>>>>>
>>>>>>
>>>>>> user> (criterium/bench (java.util.UUID/randomUUID))
>>>>>>
>>>>>> Evaluation count : 30850980 in 60 samples of 514183 calls.
>>>>>> Execution time mean : 2.012861 µs
>>>>>>
>>>>>>
>>>>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clo...@googlegroups.com
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> clojure+u...@googlegroups.com
>>> For more options, visit this group at
>>> http://groups.google.com/group/clojure?hl=en
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to clojure+u...@googlegroups.com.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>  --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to