Données en lot
Les méthodes *Many prennent des tableaux et renvoient les enregistrements créés ou leurs identifiants ; les méthodes *Stream acceptent tout itérable, ne conservent rien en mémoire et renvoient un décompte. Utilisez les flux pour les tâches d'ingestion dont les données dépassent la taille que vous souhaitez pour un tableau PHP. Les méthodes en lot verrouillent la collection une seule fois et, pour le journal et la file d'attente, regroupent plusieurs enregistrements par fsync. Les écritures en lot sont ainsi plusieurs fois plus rapides par enregistrement que les appels individuels. Les écritures en lot de DocStore synchronisent toujours chaque fichier d'enregistrement ; elles réduisent les verrouillages répétés, pas les fsync.
API de traitement en lot de DocStore :
$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');
Les lignes JSONL contiennent un objet par ligne, au format {"id": "...", "data": {...}} ou sous forme d'objet de données seul (un identifiant est généré lors de l'importation). Les lignes peuvent contenir des identifiants explicites ; l'exportation et l'importation reproduisent donc exactement une collection.
API de traitement en lot de SegmentedLog :
$log->appendMany([
['type' => 'page.saved'],
['type' => 'page.rendered'],
]);
$log->appendStream($largeIterable);
API de traitement en lot de Queue :
$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));
Les partitions facultatives placent les segments d'un journal dans un répertoire par jour ou par mois (events/partitions/2026-07-05/), afin que les périodes anciennes puissent être archivées ou supprimées en entier :
$daily = new Storh\SegmentedLog($root, 'events', partition: 'daily');
$monthly = new Storh\SegmentedLog($root, 'events', partition: 'monthly');
La rétention supprime les enregistrements du journal antérieurs à une date limite et compacte l'espace libéré ; purgeDone supprime de la mémoire les tâches terminées de la file d'attente :
$deleted = $log->retain()->olderThanDays(90)->compact();
$queue->purgeDone(olderThanSeconds: 86400);