Hi Mike,

Sometimes you just don't need uniqueness across all bits, and if you do,
use v4.
In my example, the ID is used for clipboard clips, but now I don't have to
sort them based on their timestamp.
Also this improves database performance as the btree is better organized.
There are a few videos and lots of papers on the topic.


On Fri, Sep 1, 2023 at 1:38 PM Mike Kerner via use-livecode <
use-livecode@lists.runrev.com> wrote:

> why would reducing randomness be desirable in an internet-facing app? isn't
> the whole point to
> * ensure uniqueness across the entire space
> * make it nearly impossible to guess an ID?
> i would think that once you make the id's sequential, you have eliminated
> the ability to stop an authorized user from randomly marching through your
> data.
>
> On Fri, Sep 1, 2023 at 1:21 PM Tom Glod via use-livecode <
> use-livecode@lists.runrev.com> wrote:
>
> > Hi Folks,
> >
> > Sharing this because its useful, and also, more eyeballs on the code
> makes
> > sense.
> > I implemented this with the help of chatGPT.
> >
> > This is a handler that can generate v7 UUIDs.
> > v7 UUIDs work better in databases, because they are not so random,
> > improving performance.
> > And they are sequential.
> > They also match the format of uuid v4
> > Also the specs for v7 have not yet been finalized.
> >
> > Here it is:
> >
> > function CreateUUID pVersion
> >    // This Handler returns a
> >    if pVersion is not 7 then
> >       //Return V4 Random UUID
> >       return uuid("random")
> >
> >    else if pVersion = 7 then
> >       // return V7 Random yet sequenced UUID
> >
> >       local tUnixTsMs, tVer, tRandA, tTVar, tRandB, tTheID
> >       -- Get the current timestamp in milliseconds
> >
> >       put baseConvert(the milliseconds, 10, 16) into tUnixTsMs
> >       put format("%012s", tUnixTsMs) into tUnixTsMs
> >
> >       // Set the version field to 0b0111 (7)
> >       put "7" into tVer
> >
> >       // Generate 12 bits of pseudo-random data for RAND A
> >       put random(4095) into tRandA -- 4095 is the maximum value for 12
> bits
> >       put baseConvert(tRandA, 10, 16) into tRandA
> >       put format("%03s", tRandA) into tRandA
> >
> >       // Set the variant field to 0b10
> >       put "8" into tTVar -- 0b10 in hexadecimal
> >
> >       // Generate 62 bits of pseudo-random data for RAND B
> >       repeat 16 times
> >          put baseConvert(random(15), 10, 16) after tRandB -- generate one
> > hex digit at a time
> >       end repeat
> >
> >       // Combine all the bits to form the UUID
> >       put tUnixTsMs & tVer & tRandA & tTVar & tRandB into tTheID
> >
> >       // Insert dashes to form the UUID in 8-4-4-4-12 format
> >       put char 1 to 8 of tTheID & "-" & char 9 to 12 of tTheID & "-" &
> char
> > 13 to 16 of tTheID & "-" & char 17 to 20 of tTheID & "-" & char 21 to 32
> of
> > tTheID into tTheID
> >
> >       return tTheID
> >    end if
> > end CreateUUID tVersion
> >
> > Cheers,
> >
> > Tom
> > _______________________________________________
> > use-livecode mailing list
> > use-livecode@lists.runrev.com
> > Please visit this url to subscribe, unsubscribe and manage your
> > subscription preferences:
> > http://lists.runrev.com/mailman/listinfo/use-livecode
> >
>
>
> --
> On the first day, God created the heavens and the Earth
> On the second day, God created the oceans.
> On the third day, God put the animals on hold for a few hours,
>    and did a little diving.
> And God said, "This is good."
> _______________________________________________
> use-livecode mailing list
> use-livecode@lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
>
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to