Zum Inhalt springen

Massendaten

Die *Many-Methoden nehmen Arrays entgegen und geben die erstellten Datensätze oder IDs zurück. Die *Stream-Methoden nehmen beliebige iterierbare Objekte entgegen, halten keine Daten im Arbeitsspeicher und geben eine Anzahl zurück. Verwende Streams für Einleseaufträge, deren Eingabe größer ist als ein PHP-Array, das du im Arbeitsspeicher halten möchtest. Massenmethoden sperren die Sammlung nur einmal und puffern bei Log und Queue viele Datensätze pro fsync. Dadurch sind ihre Schreibvorgänge pro Datensatz um ein Mehrfaches schneller als einzelne Aufrufe. Bei DocStore werden die einzelnen Datensatzdateien weiterhin synchronisiert; sie reduzieren die Sperrfrequenz, nicht die Anzahl der fsyncs.

DocStore-Massen-APIs:

PHP
$records = $docs->putMany([
    ['slug' => 'home', 'kind' => 'page'],
    ['slug' => 'about', 'kind' => 'page'],
]);

$count = $docs->putStream($largeIterable);

$docs->exportJsonl(__DIR__ . '/pages.jsonl');
$docs->importJsonl(__DIR__ . '/pages.jsonl');

JSONL-Zeilen bestehen aus einem Objekt pro Zeile, entweder {"id": "...", "data": {...}} oder einem reinen Datenobjekt (beim Import wird eine ID generiert). Zeilen können explizite IDs enthalten, sodass sich eine Sammlung durch Export und Import exakt wiederherstellen lässt.

SegmentedLog-Massen-APIs:

PHP
$log->appendMany([
    ['type' => 'page.saved'],
    ['type' => 'page.rendered'],
]);

$log->appendStream($largeIterable);

Queue-Massen-APIs:

PHP
$queue->enqueueMany([
    ['task' => 'render', 'pageId' => $home->id()],
    ['task' => 'notify', 'pageId' => $home->id()],
]);

$jobs = $queue->claimMany(100);
$queue->completeMany(array_map(fn ($job) => $job->id(), $jobs));

Optionale Partitionen legen die Segmente eines Logs in einem Tages- oder Monatsverzeichnis ab (events/partitions/2026-07-05/), sodass du alte Zeiträume als ganze Verzeichnisse archivieren oder löschen kannst:

PHP
$daily = new Storh\SegmentedLog($root, 'events', partition: 'daily');
$monthly = new Storh\SegmentedLog($root, 'events', partition: 'monthly');

Bei der Aufbewahrung werden Log-Datensätze gelöscht, die älter als ein Stichtag sind, und der freigegebene Speicherplatz wird komprimiert. purgeDone entfernt abgeschlossene Queue-Jobs aus dem Arbeitsspeicher:

PHP
$deleted = $log->retain()->olderThanDays(90)->compact();
$queue->purgeDone(olderThanSeconds: 86400);