Date în lot
Metodele *Many primesc tablouri și returnează înregistrările sau ID-urile create; metodele *Stream primesc orice iterabil, nu păstrează nimic în memorie și returnează un număr. Folosiți fluxuri pentru sarcini de ingestie în care intrarea este mai mare decât un tablou PHP pe care doriți să-l păstrați. Metodele în lot blochează colecția o singură dată și, pentru jurnal și coadă, pun în buffer mai multe înregistrări per fsync, ceea ce face scrierile în lot de câteva ori mai rapide per înregistrare decât apelurile individuale. Scrierile în lot DocStore sincronizează totuși fiecare fișier de înregistrare; economisesc blocările repetate, nu operațiile fsync.
API-uri DocStore pentru operații în lot:
$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');
Rândurile JSONL constau dintr-un obiect pe linie, fie {"id": "...", "data": {...}}, fie
un obiect de date simplu (la import se generează un ID). Rândurile pot avea ID-uri explicite, astfel încât exportul și importul reproduc exact o colecție.
API-uri SegmentedLog pentru operații în lot:
$log->appendMany([
['type' => 'page.saved'],
['type' => 'page.rendered'],
]);
$log->appendStream($largeIterable);
API-uri Queue pentru operații în lot:
$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));
Partițiile opționale plasează segmentele unui jurnal într-un director per zi sau per lună
(events/partitions/2026-07-05/), astfel încât perioadele vechi să poată fi arhivate
sau șterse ca directoare întregi:
$daily = new Storh\SegmentedLog($root, 'events', partition: 'daily');
$monthly = new Storh\SegmentedLog($root, 'events', partition: 'monthly');
Politica de păstrare șterge înregistrările din jurnal mai vechi decât o limită și compactează
spațiul recuperat; purgeDone elimină din memorie sarcinile finalizate din coadă:
$deleted = $log->retain()->olderThanDays(90)->compact();
$queue->purgeDone(olderThanSeconds: 86400);