
# Масиви даних

Методи `*Many` приймають масиви й повертають створені записи або їхні ідентифікатори; методи `*Stream` приймають будь-яку ітеровану послідовність, не зберігають дані в пам’яті та повертають кількість. Використовуйте потоки для завдань завантаження, коли вхідні дані завеликі для бажаного масиву PHP. Масові методи блокують колекцію один раз і в журналі та черзі буферизують багато записів на один fsync, завдяки чому масові записи виконуються в кілька разів швидше на запис, ніж виклики по одному. Масові записи `DocStore` усе одно синхронізують кожен файл запису; вони зменшують частоту блокувань, а не кількість fsync.

Масові 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');
```

JSONL — це рядки, по одному об’єкту на рядок: або `{"id": "...", "data": {...}}`, або
звичайний об’єкт даних (під час імпорту генерується ідентифікатор). Рядки можуть містити явні
ідентифікатори, тож експорт та імпорт точно відтворюють колекцію.

Масові API SegmentedLog:

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

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

Масові 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));
```

Необов’язкові секції розміщують сегменти журналу в каталозі за день або місяць
(`events/partitions/2026-07-05/`), щоб старі періоди можна було архівувати
або видаляти цілими каталогами:

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

Політика зберігання видаляє записи журналу, старіші за граничну дату, і ущільнює звільнене
місце; `purgeDone` видаляє завершені завдання черги з пам’яті:

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