UUIDv7
Kiekvienas storh įrašo ID yra UUIDv7: 48 bitų laiko žyma milisekundžių tikslumu, po kurios eina atsitiktinė entropija, suformatuota kaip standartinė 36 simbolių ilgio UUID. Kadangi laiko žyma pateikiama pirmiausia, ID rūšiuojami pagal sukūrimo laiką, o ši savybė įgalina daugumą storh funkcijų: puslapiavimą pagal žymeklį (after($id)), skaitymą pagal laiko intervalą, segmentų praleidimą žurnale ir stabilų rūšiavimą visur.
$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);
Viename procese ID generuojami monotoniškai: jei keli ID sukuriami tą pačią milisekundę, vietoj pakartotinio atsitiktinės reikšmės generavimo padidinamas ankstesnis entropijos skaitiklis, todėl net ir per trumpą laiką įrašytos duomenų serijos išlaiko sukūrimo tvarką.
Laiko nurodymas
Laiko intervalams storh apskaičiuoja mažiausią ir didžiausią galimą UUIDv7 nurodytai milisekundės laiko žymai ir palygina ID su šiomis ribomis:
$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);
Todėl skaitant pagal laiko intervalą įrašo duomenyse nereikia laiko žymos lauko: sukūrimo laikas užkoduotas ID.
Savų ID nurodymas
Visi varikliai priima aiškiai nurodytą ID kiekvienam įrašymui ($docs->put($data, $id)) ir id_generator iškviečiamąją funkciją konstruktoriuose. Abiem būdais pateikti ID tikrinami kaip UUIDv7, todėl pasirinktiniai generatoriai privalo juos generuoti; deterministiniai generatoriai leidžia testų rinkiniui kurti atkuriamus bandymo duomenis.
UuidV7::reset_for_tests() tarp testavimo atvejų išvalo proceso lygmens monotonišką būseną.