Hoppa till innehåll

Frågor

RecordQuery är strömningsfiltret som används med stream(). Det täcker åtkomstmönster för tillägg: återuppta efter en markör, läsa ett tidsfönster, filtrera på fältlikhet och stanna vid en gräns. För mer avancerade predikat, sortering och indexbaserade sökningar använder du frågebyggaren; för allt som en vanlig foreach över en ström kan göra är RecordQuery det billigare verktyget.

RecordQuery är oföränderlig. Varje modifierare returnerar en klonad fråga:

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() och time_range_ms() använder UUID-ordning, så de behöver inget tidsstämpelfält bland postens data. På SegmentedLog hoppar de också över arbete: segment vars id-intervall ligger utanför fönstret öppnas aldrig, och glesa index per segment söker sig nära den första matchande posten i stället för att skanna från början.

where_equal() jämför ett toppnivåfält i data med === och accepterar skalära värden eller null. Ett null-filter matchar poster där fältet finns och är null; poster utan fältet matchar inte.

Markörsidnumrering

Id:n sorteras efter skapandetid, så det sista id:t på en sida blir markören för nästa:

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

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

Hantera korrupta poster

En skanning avbryts vid den första oläsbara posten som standard. Använd continue_on_error() när skanningen ska hoppa över den och rapportera felet i stället:

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

Platsen är postens id för DocStore och segment-file:byte-offset för SegmentedLog. repair() är verktyget för att faktiskt rensa bort korrupta poster; se CLI.