Pāriet uz saturu

UUIDv7

Katrs storh ieraksta ID ir UUIDv7: 48 bitu laika zīmogs milisekundēs, kam seko nejaušas vērtības, un tas ir formatēts kā standarta 36 rakstzīmju UUID. Tā kā laika zīmogs atrodas sākumā, ID tiek sakārtoti pēc izveides laika, un šī īpašība nodrošina lielāko daļu storh: lapošanu ar kursoru (after($id)), nolasīšanu laika diapazonā, žurnāla segmentu izlaišanu un stabilu secību visur.

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

Vienā procesā ID tiek ģenerēti monotoniski: jauni ID, kas izveidoti tajā pašā milisekundē, palielina iepriekšējā ID nejaušo vērtību, nevis ģenerē to no jauna, tāpēc arī strauju ierakstu uzplūdu laikā secība atbilst izveides secībai.

Laika norādīšana

Laika intervāliem storh atvasina mazāko un lielāko iespējamo UUIDv7 konkrētajam laika zīmogam milisekundēs un salīdzina ID ar šīm robežām:

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

Tāpēc nolasīšanai laika diapazonā ieraksta datos nav vajadzīgs laika zīmoga lauks: izveides laiks ir iekļauts ID.

Savu ID norādīšana

Visi dzinēji katrai ierakstīšanas darbībai pieņem skaidri norādītu ID ($docs->put($data, $id)), kā arī id_generator funkciju konstruktoros. ID, kas iegūti abos veidos, tiek validēti kā UUIDv7, tāpēc pielāgotiem ģeneratoriem tie jāizveido; deterministiski ģeneratori ļauj testu komplektam izveidot atkārtojamas pārbaudes datu kopas. UuidV7::reset_for_tests() notīra procesa līmeņa monotono stāvokli starp testu gadījumiem.