
# Tömeges adatok

A(z) `*Many` metódusok tömböket fogadnak, és a létrehozott rekordokat vagy azonosítókat adják vissza; a(z) `*Stream` metódusok bármilyen iterálható értéket fogadnak, semmit sem tartanak memóriában, és egy darabszámot adnak vissza. Akkor használjon adatfolyamokat, ha a betöltési feladat bemenete nagyobb annál, mint amit egy PHP tömbben tárolni szeretne. A tömeges metódusok csak egyszer zárolják a gyűjteményt, a napló és a sor esetében pedig sok rekordot pufferelnek fsync-enként; ezért rekordként többször gyorsabbak az egyenkénti hívásoknál. A(z) `DocStore` tömeges írásai továbbra is minden rekordfájlt szinkronizálnak; a zárolási többletet csökkentik, az fsync-ek számát nem.

DocStore tömeges API-k:

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

A(z) JSONL sorok soronként egy objektumot tartalmaznak, vagy `{"id": "...", "data": {...}}`, vagy egyszerű adatobjektum formájában (importáláskor azonosító jön létre). A sorok explicit azonosítót is tartalmazhatnak, így az export és az import pontosan oda-vissza alakítja a gyűjteményt.

SegmentedLog tömeges API-k:

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

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

Queue tömeges API-k:

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

Az opcionális particionálás a napló szegmenseit nap vagy hónap szerinti
könyvtárba helyezi (`events/partitions/2026-07-05/`), így a régi időszakok teljes könyvtárként archiválhatók
vagy törölhetők:

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

A megőrzési szabály törli a megadott időpontnál régebbi naplórekordokat, és
töredezettségmentesíti a visszanyert helyet; a(z) `purgeDone` eltávolítja a memóriából a
befejezett sorfeladatokat:

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