Към съдържанието

Групови данни

Методите *Many приемат масиви и връщат създадените записи или ID-та; методите *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": {...}} или като обикновен обект с данни (при импортиране се генерира ID). Редовете може да съдържат изрични ID-та, така че експортирането и импортирането възстановяват колекцията точно.

Групови 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);