Dati in blocco
I metodi *Many accettano array e restituiscono i record o gli ID creati; i metodi
*Stream accettano qualsiasi iterabile, non conservano dati in memoria e restituiscono un conteggio. Usate gli stream per i processi di acquisizione quando l'input è più grande di un array PHP che volete gestire. I metodi in blocco acquisiscono una sola volta il lock della raccolta e, per il log e la coda, memorizzano temporaneamente molti record per ogni fsync: così le scritture in blocco sono diverse volte più veloci per record rispetto alle chiamate singole. Le scritture in blocco di DocStore sincronizzano comunque ogni file di record; riducono le acquisizioni del lock, non gli fsync.
API in blocco di 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');
Le righe JSONL sono un oggetto per riga, in formato {"id": "...", "data": {...}} oppure
come oggetto di dati semplice (durante l'importazione viene generato un ID). Le righe possono contenere ID espliciti, quindi esportazione e importazione consentono di riprodurre esattamente una raccolta.
API in blocco di SegmentedLog:
$log->appendMany([
['type' => 'page.saved'],
['type' => 'page.rendered'],
]);
$log->appendStream($largeIterable);
API in blocco di 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));
Le partizioni opzionali collocano i segmenti di un log in una directory per giorno o per mese
(events/partitions/2026-07-05/), consentendo di archiviare o eliminare interi periodi come directory:
$daily = new Storh\SegmentedLog($root, 'events', partition: 'daily');
$monthly = new Storh\SegmentedLog($root, 'events', partition: 'monthly');
La conservazione elimina i record del log precedenti a una data limite e compatta lo spazio recuperato; purgeDone rimuove dalla memoria i job completati della coda:
$deleted = $log->retain()->olderThanDays(90)->compact();
$queue->purgeDone(olderThanSeconds: 86400);