UUID v7

Tom Glod tom at makeshyft.com
Fri Sep 1 15:53:22 EDT 2023


Oh yeah,that makes sense usually...  just a different use case that is all.



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

> it's an interesting topic, because in one of the db communities i'm
> involved with, they're actually going the other way, increasing entropy.
>
> On Fri, Sep 1, 2023 at 1:56 PM Tom Glod via use-livecode <
> use-livecode at lists.runrev.com> wrote:
>
> > 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 at 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 at 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 at 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 at 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 at 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 at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
>


More information about the use-livecode mailing list