Ugrás a tartalomhoz

UUIDv7

Minden storh rekordazonosító egy UUIDv7: 48 bites milliszekundumos időbélyegből és véletlenszerű entrópiából áll, szabványos, 36 karakteres UUID formában. Mivel az időbélyeg áll az elején, az azonosítók létrehozási idő szerint rendeződnek, és ez az egy tulajdonság teszi lehetővé az storh legtöbb funkcióját: a kurzoros lapozást (after($id)), az időtartomány szerinti olvasást, a szegmensek kihagyását a naplóban és a stabil rendezést mindenhol.

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

A generálás folyamaton belül monoton: az ugyanabban a milliszekundumban létrehozott azonosítók újrasorsolás helyett növelik az előző entrópiát, így a gyors írási hullámok is létrehozási sorrendben rendeződnek.

Idő szerinti címzés

Időablakok esetén az storh kiszámítja az adott milliszekundumos időbélyeghez tartozó lehetséges legkisebb és legnagyobb UUIDv7 értéket, majd ezekhez a határokhoz viszonyítja az azonosítókat:

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

Ezért nincs szükség időbélyegmezőre a rekordadatokban az időtartomány szerinti olvasáshoz: a létrehozás idejét maga az azonosító hordozza.

Saját azonosítók megadása

Minden motor elfogad explicit azonosítót írásonként ($docs->put($data, $id)), valamint konstruktoraiban egy id_generator hívható függvényt. Mindkét útvonalról származó azonosítókat UUIDv7 formátumúként ellenőrzi, ezért az egyedi generátoroknak ilyeneket kell előállítaniuk; a tesztcsomag determinisztikus generátorokkal hoz létre reprodukálható tesztadatokat. Az UuidV7::reset_for_tests() törli a folyamat szintű monoton állapotot a tesztesetek között.