
# Masiniai duomenys

`*Many` metodai priima masyvus ir grąžina sukurtus įrašus arba ID; `*Stream` metodai priima bet kokią iteruojamą seką, nieko nelaiko atmintyje ir grąžina skaičių. Duomenų įkėlimo užduotims naudokite srautus, kai įvestis didesnė, nei norite laikyti PHP masyve. Masiniai metodai kolekcijos užraktą paima vieną kartą, o žurnale ir eilėje prieš fsync buferizuoja daug įrašų, todėl masinis įrašymas vienam įrašui tenka kelis kartus greičiau nei po vieną kvietimą. `DocStore` masinis įrašymas vis tiek sinchronizuoja kiekvieną įrašo failą; taip sumažinamas užraktų kaitaliojimas, bet ne fsync skaičius.

DocStore masinės operacijos 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 eilutėse kiekvienoje eilutėje pateikiamas vienas objektas – arba `{"id": "...", "data": {...}}`, arba paprastas duomenų objektas (importuojant sugeneruojamas ID). Eilutėse gali būti aiškiai nurodyti ID, todėl eksportuojant ir importuojant kolekcija atkuriama tiksliai.

SegmentedLog masinės operacijos API:

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

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

Queue masinės operacijos 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));
```

Pasirenkami skaidiniai žurnalo segmentus saugo pagal dieną arba mėnesį sudarytuose aplankuose (`events/partitions/2026-07-05/`), todėl senus laikotarpius galima archyvuoti arba ištrinti kaip ištisus aplankus:

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

Saugojimo trukmės valdymo funkcija ištrina senesnius nei nurodyta data žurnalo įrašus ir sutankina atlaisvintą vietą; `purgeDone` iš atminties pašalina užbaigtas eilės užduotis:

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