Preskočiť na obsah

Hromadné údaje

Metódy *Many prijímajú polia a vracajú vytvorené záznamy alebo ID; metódy *Stream prijímajú ľubovoľnú iterovateľnú hodnotu, nič neukladajú do pamäte a vracajú počet. Streamy použite pri úlohách načítania, ktorých vstup je väčší, než chcete spracúvať ako pole PHP. Hromadné metódy získajú zámok kolekcie iba raz a pri logu a fronte ukladajú do vyrovnávacej pamäte viacero záznamov na jeden fsync, vďaka čomu sú hromadné zápisy na záznam niekoľkonásobne rýchlejšie než volania po jednom. Hromadné zápisy DocStore stále synchronizujú každý súbor záznamu; šetria časté zamykanie, nie fsync.

Hromadné API DocStore:

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');

Riadky JSONL sú jeden objekt na riadok, buď {"id": "...", "data": {...}}, alebo samostatný dátový objekt (pri importe sa vygeneruje ID). Riadky môžu obsahovať explicitné ID, takže export a import presne zachovajú kolekciu.

Hromadné API SegmentedLog:

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

$log->appendStream($largeIterable);

Hromadné API Queue:

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));

Voliteľné oddiely ukladajú segmenty logu do adresára podľa dňa alebo mesiaca (events/partitions/2026-07-05/), takže staršie obdobia možno archivovať alebo odstrániť ako celé adresáre:

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

Uchovávanie odstraňuje záznamy logu staršie než stanovený čas a zhutňuje uvoľnené miesto; purgeDone odstraňuje dokončené úlohy fronty z pamäte:

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