Preskoči na vsebino

Poizvedbe

RecordQuery je pretočni filter za uporabo z stream(). Pokriva vzorce dostopa, usmerjene v dodajanje: nadaljevanje za kazalcem, branje časovnega okna, filtriranje po enakosti polja in ustavitev pri omejitvi. Za zahtevnejše pogoje, razvrščanje in iskanje na podlagi indeksov uporabite gradnik poizvedb query builder; za vse, kar lahko naredi navaden foreach nad tokom, je RecordQuery cenejše orodje.

RecordQuery je nespremenljiv. Vsak modifikator vrne klon poizvedbe:

PHP
$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() in time_range_ms() uporabljata razvrščanje UUID, zato v podatkih zapisa ne potrebujeta časovnega polja. Pri SegmentedLog tudi preskočita nepotrebno delo: segmenti, katerih obseg ID-jev je zunaj časovnega okna, se sploh ne odprejo, redki indeksi na posameznih segmentih pa se pomaknejo blizu prvega ujemajočega se zapisa, namesto da bi pregledovali od začetka.

where_equal() primerja vrhnje podatkovno polje z === in sprejme skalarne vrednosti ali null. Filter null se ujema z zapisi, v katerih polje obstaja in ima vrednost null; zapisi brez tega polja se ne ujemajo.

Ostranjevanje s kazalcem

ID-ji so razvrščeni po času nastanka, zato je zadnji ID ene strani kazalec za naslednjo:

PHP
$page = iterator_to_array($store->stream(
    Storh\RecordQuery::all()->after($lastSeenId)->limit(100)
), false);

$lastSeenId = [] === $page ? $lastSeenId : end($page)->id();

Ohranitev poškodovanih zapisov

Pregled privzeto sproži napako pri prvem neberljivem zapisu. Uporabite continue_on_error(), če naj pregled zapis preskoči in namesto tega sporoči napako:

PHP
$query = Storh\RecordQuery::all()->continue_on_error(
    static function (string $location, Throwable $error): void {
        error_log($location . ': ' . $error->getMessage());
    },
);

Lokacija je ID zapisa za DocStore in segment-file:byte-offset za SegmentedLog. repair() je orodje za dejansko čiščenje poškodovanih zapisov; glejte CLI.