
# Lielapjoma dati

`*Many` metodes pieņem masīvus un atgriež izveidotos ierakstus vai ID; `*Stream` metodes pieņem jebkuru iterējamu objektu, neko neglabā atmiņā un atgriež skaitu. Izmantojiet straumes ievades uzdevumiem, kuros dati ir lielāki, nekā vēlaties glabāt vienā PHP masīvā. Lielapjoma metodes iegūst kolekcijas bloķējumu tikai vienreiz un žurnālā un rindā pirms fsync sagatavo daudzus ierakstus, tāpēc ierakstu apstrāde ir vairākas reizes ātrāka nekā pa vienam. `DocStore` lielapjoma ieraksti joprojām sinhronizē katru ieraksta failu; tie samazina bloķēšanas izmaksas, nevis fsync izsaukumus.

DocStore lielapjoma API:

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

JSONL rindas ir objekts katrā rindā — vai nu `{"id": "...", "data": {...}}`, vai
vienkāršs datu objekts (importējot tiek ģenerēts ID). Rindās var būt skaidri norādīti
ID, tāpēc kolekciju var eksportēt un importēt, to precīzi atjaunojot.

SegmentedLog lielapjoma API:

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

$log->appendStream($largeIterable);
```

Queue lielapjoma API:

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

Neobligātie nodalījumi ievieto žurnāla segmentus katrai dienai vai mēnesim atsevišķā
mapē (`events/partitions/2026-07-05/`), tāpēc vecākus periodus var arhivēt
vai dzēst kā veselas mapes:

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

Glabāšanas termiņš dzēš žurnāla ierakstus, kas vecāki par noteikto robeždatumu, un saspiež atbrīvoto
vietu; `purgeDone` izņem no atmiņas pabeigtos rindas uzdevumus:

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