
# UUIDv7

Iga storh kirje ID on UUIDv7: 48-bitine millisekundiline ajatempel koos juhusliku entroopiaga, vormindatud standardse 36-märgilise UUID-na. Kuna ajatempel on alguses, sortitakse ID-d loomise aja järgi ning see omadus võimaldab enamikku funktsioonidest storh: kursori abil lehekülgjaotust (`after($id)`), ajavahemiku lugemist, logis segmentide vahelejätmist ja stabiilset järjestust kõikjal.

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

Protsessisiseselt on genereerimine monotoonne: samas millisekundis loodud ID-d suurendavad eelmise entroopiat selle uuesti juhuslikult genereerimise asemel, nii et ka kiiresti järjestikused kirjutused püsivad loomise järjekorras.

## Aja järgi adresseerimine

Ajavahemike jaoks tuletab storh millisekundilise ajatempli kohta väikseima ja suurima võimaliku UUIDv7 ning võrdleb ID-sid nende piirväärtustega:

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

Seetõttu pole ajavahemiku kirjete lugemiseks vaja andmetes ajatempli välja: loomise aeg sisaldub ID-s.

## Enda ID-de määramine

Kõik mootorid aktsepteerivad igale kirjutusele määratud ID-d (`$docs->put($data, $id)`) ja oma konstruktorisse edastatavat `id_generator` funktsiooni. Mõlemal viisil loodud ID-sid valideeritakse kui UUIDv7, seega peavad kohandatud generaatorid neid väljastama; deterministlike generaatorite abil loob testikomplekt korratavaid testandmeid. `UuidV7::reset_for_tests()` lähtestab testijuhtude vahel protsessitaseme monotoonse oleku.
