İçeriğe geç

Toplu Veri

*Many metotları diziler alır ve oluşturulan kayıtları veya kimlikleri döndürür; *Stream metotları ise her tür yinelenebilir veriyi alır, bellekte hiçbir şey tutmaz ve bir sayı döndürür. Girdi, tek bir PHP dizisinde tutmak isteyeceğinizden büyük olan alım işleri için akışları kullanın. Toplu metotlar koleksiyon kilidini bir kez alır; günlük ve kuyruk üzerinde fsync başına birçok kayıt tamponlayarak kayıt başına toplu yazmaları tek tek çağrılardan birkaç kat daha hızlı hale getirir. DocStore toplu yazmalar yine de her kayıt dosyasını ayrı ayrı eşitler; fsync sayısını değil, kilit kullanım sıklığını azaltır.

DocStore toplu API'leri:

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 satırlarında her satırda bir nesne bulunur; nesne {"id": "...", "data": {...}} biçiminde veya yalın bir veri nesnesi olabilir (içe aktarma sırasında bir kimlik oluşturulur). Satırlarda açık kimlikler bulunabilir; böylece dışa ve içe aktarma koleksiyonun aynısını korur.

SegmentedLog toplu API'leri:

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

$log->appendStream($largeIterable);

Queue toplu API'leri:

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

İsteğe bağlı bölümler, bir günlüğün bölümlerini gün veya ay başına bir dizinin altına yerleştirir (events/partitions/2026-07-05/); böylece eski dönemler bütün dizinler halinde arşivlenebilir veya silinebilir:

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

Saklama süresi, kesim tarihinden eski günlük kayıtlarını siler ve geri kazanılan alanı sıkıştırır; purgeDone ise tamamlanmış kuyruk işlerini bellekten kaldırır:

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