Hoppa till innehåll

UUIDv7

Varje post-id i storh är en UUIDv7: en tidsstämpel på 48 bitar i millisekunder följd av slumpmässig entropi, formaterad som en standard-UUID på 36 tecken. Eftersom tidsstämpeln kommer först sorteras id:n efter skapandetid, och den egenskapen driver det mesta av storh: markörsidnumrering (after($id)), tidsintervallsläsningar, segmentskipning i loggen och stabil sortering överallt.

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

Genereringen är monoton inom en process: id:n som skapas under samma millisekund ökar den föregående entropin i stället för att slumpa om den, så snabba skrivningar sorteras ändå i skapandeordning.

Tidsåtkomst

För tidsfönster härleder storh minsta och största möjliga UUIDv7 för en tidsstämpel i millisekunder och jämför id:n med dessa gränser:

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

Därför behöver tidsintervallsläsningar inget tidsstämpelfält i postens data: id:t innehåller skapandetiden.

Ange egna id:n

Alla motorer accepterar ett uttryckligt id per skrivning ($docs->put($data, $id)) och en id_generator-anropbar funktion i sina konstruktörer. Id:n från båda vägarna valideras som UUIDv7, så anpassade generatorer måste skapa sådana; deterministiska generatorer skapar reproducerbara testdata. UuidV7::reset_for_tests() rensar det processövergripande monotona tillståndet mellan testfall.