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