
# Massedata

`*Many`-metoderne tager arrays og returnerer de oprettede poster eller id'er; `*Stream`-metoderne tager enhver iterable, holder intet i hukommelsen og returnerer et antal. Brug streams til indlæsningsopgaver, hvor inputtet er større, end du ønsker i et PHP-array. Massemetoderne tager samlingslåsen én gang og buffer mange poster pr. fsync i loggen og køen, hvilket gør deres masseskrevne poster flere gange hurtigere end enkeltkald. `DocStore` masse-skrivninger synkroniserer stadig hver postfil; de sparer låseaktivitet, ikke fsync'er.

DocStores masse-API'er:

```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-rækker er ét objekt pr. linje, enten `{"id": "...", "data": {...}}` eller et almindeligt dataobjekt (et id genereres ved import). Rækker kan have eksplicitte id'er, så eksport og import genskaber en samling nøjagtigt.

SegmentedLogs masse-API'er:

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

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

Queues masse-API'er:

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

Valgfrie partitioner placerer en logs segmenter i en mappe pr. dag eller måned (`events/partitions/2026-07-05/`), så ældre perioder kan arkiveres eller slettes som hele mapper:

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

Opbevaringspolitikken sletter logposter, der er ældre end en skæringsdato, og komprimerer den frigjorte plads; `purgeDone` fjerner afsluttede job fra køen fra hukommelsen:

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