Užklausos
RecordQuery yra srautinio filtravimo įrankis, naudojamas su stream(). Jis skirtas prieigos šablonams, kuriuose duomenys pridedami: tęsti nuo žymeklio, skaityti laiko intervalą, filtruoti pagal laukų lygybę ir sustoti pasiekus limitą. Sudėtingesniems predikatams, rikiavimui ir paieškai pagal indeksą naudokite užklausų kūrimo priemonę; viskam, ką gali atlikti paprastas foreach sraute, RecordQuery yra našesnis įrankis.
RecordQuery yra nekintamas. Kiekvienas modifikatorius grąžina klonuotą užklausą:
$query = Storh\RecordQuery::all()
->after($lastSeenId)
->time_range_ms($fromMs, $untilMs)
->where_equal('kind', 'page')
->limit(100);
foreach ($store->stream($query) as $record) {
// Records are yielded lazily.
}
after() ir time_range_ms() naudoja UUID tvarką, todėl įrašo duomenyse nereikia laiko žymos lauko. Naudojant SegmentedLog, jie taip pat praleidžia nereikalingą darbą: segmentai, kurių ID intervalas nepatenka į nurodytą langą, neatveriami, o reti kiekvieno segmento indeksai leidžia greitai pasiekti pirmą tinkamą įrašą, neskaitant nuo pradžios.
where_equal() palygina aukščiausio lygio duomenų lauką su === ir priima skaliarines reikšmes arba null. null filtras atitinka įrašus, kuriuose laukas yra ir jo reikšmė yra null; įrašai be šio lauko neatitinka filtro.
Žymekliais valdoma puslapiuotė
ID rikiuojami pagal sukūrimo laiką, todėl paskutinio vieno puslapio ID tampa kito puslapio žymekliu:
$page = iterator_to_array($store->stream(
Storh\RecordQuery::all()->after($lastSeenId)->limit(100)
), false);
$lastSeenId = [] === $page ? $lastSeenId : end($page)->id();
Sugadintų įrašų apdorojimas
Pagal numatytuosius nustatymus skenavimas sustoja aptikęs pirmą neperskaitomą įrašą. Jei norite jį praleisti ir pranešti apie klaidą, naudokite continue_on_error():
$query = Storh\RecordQuery::all()->continue_on_error(
static function (string $location, Throwable $error): void {
error_log($location . ': ' . $error->getMessage());
},
);
Vieta yra įrašo ID, kai naudojamas DocStore, o segment-file:byte-offset – kai naudojamas SegmentedLog. Sugadintus įrašus išvalo įrankis repair(); žr. CLI.