UUIDv7
Fiecare id de înregistrare storh este un UUIDv7: un marcaj temporal pe 48 de biți exprimat în milisecunde, urmat de entropie aleatorie și formatat ca UUID standard de 36 de caractere. Deoarece marcajul temporal este la început, id-urile se sortează după momentul creării, iar această proprietate face posibile majoritatea funcțiilor din storh: paginarea cu cursoare (after($id)), citirile pe intervale de timp, omiterea segmentelor din jurnal și ordonarea stabilă peste tot.
$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);
Generarea este monotonă în cadrul unui proces: id-urile create în aceeași milisecundă incrementează entropia anterioară în loc să o genereze din nou, astfel că și rafalele rapide de scrieri se sortează după ordinea creării.
Adresare după timp
Pentru ferestre de timp, storh determină cele mai mici și cele mai mari valori posibile UUIDv7 pentru un marcaj temporal exprimat în milisecunde și compară id-urile cu aceste limite:
$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);
De aceea, citirile pe intervale de timp nu au nevoie de un câmp cu marcaj temporal în datele înregistrării: id-ul conține momentul creării.
Specificarea propriilor id-uri
Toate motoarele acceptă un id explicit pentru fiecare scriere ($docs->put($data, $id)) și un apelabil id_generator în constructor. Id-urile furnizate pe oricare dintre aceste căi sunt validate ca UUIDv7, deci generatoarele personalizate trebuie să le producă; generatoarele deterministe sunt modul în care suita de teste creează date reproductibile. UuidV7::reset_for_tests() șterge starea de monotonie de la nivelul procesului între cazurile de testare.