
# 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.

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

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:

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

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.
