Liigu sisu juurde

UUIDv7

Iga storh kirje ID on UUIDv7: 48-bitine millisekundiline ajatempel koos juhusliku entroopiaga, vormindatud standardse 36-märgilise UUID-na. Kuna ajatempel on alguses, sortitakse ID-d loomise aja järgi ning see omadus võimaldab enamikku funktsioonidest storh: kursori abil lehekülgjaotust (after($id)), ajavahemiku lugemist, logis segmentide vahelejätmist ja stabiilset järjestust kõikjal.

PHP
$id = Storh\UuidV7::generate();

Storh\UuidV7::is_valid($id);          // bool, accepts upper and lower case
Storh\UuidV7::assert_valid($id);      // throws StorageException instead
$timestampMs = Storh\UuidV7::timestamp_ms($id);

Protsessisiseselt on genereerimine monotoonne: samas millisekundis loodud ID-d suurendavad eelmise entroopiat selle uuesti juhuslikult genereerimise asemel, nii et ka kiiresti järjestikused kirjutused püsivad loomise järjekorras.

Aja järgi adresseerimine

Ajavahemike jaoks tuletab storh millisekundilise ajatempli kohta väikseima ja suurima võimaliku UUIDv7 ning võrdleb ID-sid nende piirväärtustega:

PHP
$query = Storh\RecordQuery::all()->time_range_ms(
    1_700_000_000_000,
    1_700_000_060_000,
);

$lower = Storh\UuidV7::min_for_timestamp_ms(1_700_000_000_000);
$upper = Storh\UuidV7::max_for_timestamp_ms(1_700_000_060_000);

Seetõttu pole ajavahemiku kirjete lugemiseks vaja andmetes ajatempli välja: loomise aeg sisaldub ID-s.

Enda ID-de määramine

Kõik mootorid aktsepteerivad igale kirjutusele määratud ID-d ($docs->put($data, $id)) ja oma konstruktorisse edastatavat id_generator funktsiooni. Mõlemal viisil loodud ID-sid valideeritakse kui UUIDv7, seega peavad kohandatud generaatorid neid väljastama; deterministlike generaatorite abil loob testikomplekt korratavaid testandmeid. UuidV7::reset_for_tests() lähtestab testijuhtude vahel protsessitaseme monotoonse oleku.