一括データ
*Manyメソッドは配列を受け取り、作成されたレコードまたはIDを返します。*Streamメソッドは任意の反復可能オブジェクトを受け取り、メモリを保持せずに件数を返します。入力がPHP配列に収まらない取り込みジョブでは、ストリームを使ってください。一括メソッドはコレクションのロックを一度だけ取得し、ログとキューでは1回のfsyncで多くのレコードをまとめて書き込むため、1件ずつ呼び出すよりレコードあたりの一括書き込みが数倍速くなります。DocStoreの一括書き込みではレコードファイルごとに同期します。削減するのはロックの頻繁な取得であり、fsyncの回数ではありません。
DocStoreの一括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の行は1行につき1オブジェクトで、{"id": "...", "data": {...}}またはデータオブジェクト単体です(インポート時にIDが生成されます)。行には明示的なIDを含められるため、エクスポートとインポートでコレクションを完全に往復できます。
SegmentedLogの一括API:
PHP
$log->appendMany([
['type' => 'page.saved'],
['type' => 'page.rendered'],
]);
$log->appendStream($largeIterable);
Queueの一括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));
任意のパーティション分割を指定すると、ログのセグメントが日別または月別のディレクトリ(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);