Preskočiť na obsah

UUIDv7

Každé ID záznamu storh je UUIDv7: 48-bitová časová značka v milisekundách, za ktorou nasleduje náhodná entropia, vo formáte štandardného 36-znakového UUID. Keďže časová značka je na začiatku, ID sa triedia podľa času vytvorenia a táto vlastnosť umožňuje väčšinu funkcií storh: stránkovanie pomocou kurzora (after($id)), čítanie v časovom rozsahu, preskakovanie segmentov v zázname a stabilné usporiadanie všade.

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);

Generovanie je v rámci procesu monotónne: ID vytvorené v tej istej milisekunde zvýši predchádzajúcu entropiu namiesto jej opätovného náhodného generovania, takže sa aj rýchle dávky zápisov naďalej triedia podľa poradia vytvorenia.

Adresovanie podľa času

Pre časové okná storh odvodí najmenšie a najväčšie možné UUIDv7 pre časovú značku v milisekundách a porovná ID s týmito hranicami:

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);

Preto pri čítaní v časovom rozsahu netreba v údajoch záznamu časovú značku: ID obsahuje čas vytvorenia.

Zadávanie vlastných ID

Všetky moduly prijímajú pri každom zápise explicitné ID ($docs->put($data, $id)) a v konštruktoroch aj volateľný objekt id_generator. ID získané ktorýmkoľvek z týchto spôsobov sa validujú ako UUIDv7, preto ich vlastné generátory musia vytvárať; deterministické generátory umožňujú testovacej sade vytvárať reprodukovateľné testovacie údaje. UuidV7::reset_for_tests() vymaže monotónny stav na úrovni procesu medzi testovacími prípadmi.