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.
$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:
$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.