Lewati ke konten

Data Massal

Metode *Many menerima array dan mengembalikan record atau ID yang dibuat; metode *Stream menerima iterable apa pun, tidak menyimpan apa pun di memori, dan mengembalikan jumlah. Gunakan stream untuk tugas ingest ketika input lebih besar daripada yang ingin Anda tampung dalam satu array PHP. Metode massal hanya mengambil kunci koleksi sekali dan, pada log serta antrean, menyangga banyak record per fsync, sehingga penulisan massal beberapa kali lebih cepat per record daripada pemanggilan satu per satu. Penulisan massal DocStore tetap menyinkronkan setiap file record; metode ini mengurangi frekuensi penguncian, bukan fsync.

API massal 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');

Baris JSONL berisi satu objek per baris, baik berupa {"id": "...", "data": {...}} maupun objek data polos (ID dibuat saat impor). Baris dapat memuat ID eksplisit, sehingga ekspor dan impor menghasilkan koleksi yang sama persis.

API massal SegmentedLog:

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

$log->appendStream($largeIterable);

API massal 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));

Partisi opsional menempatkan segmen log dalam direktori per hari atau per bulan (events/partitions/2026-07-05/), sehingga periode lama dapat diarsipkan atau dihapus sebagai direktori utuh:

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

Retensi menghapus record log yang lebih lama daripada batas waktu dan memadatkan ruang yang dibebaskan; purgeDone menghapus pekerjaan antrean yang sudah selesai dari memori:

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