Μαζικά δεδομένα
Οι μέθοδοι *Many λαμβάνουν πίνακες και επιστρέφουν τις εγγραφές ή τα αναγνωριστικά που δημιουργήθηκαν· οι
μέθοδοι *Stream δέχονται οποιοδήποτε iterable, δεν κρατούν δεδομένα στη μνήμη και επιστρέφουν
μια μέτρηση. Χρησιμοποιήστε ροές για εργασίες εισαγωγής όπου η είσοδος είναι μεγαλύτερη από έναν
PHP πίνακα που θέλετε να διατηρείτε στη μνήμη. Οι μαζικές μέθοδοι κλειδώνουν τη συλλογή μία φορά και, στο αρχείο καταγραφής
και στην ουρά, αποθηκεύουν προσωρινά πολλές εγγραφές ανά fsync, κάνοντας τις μαζικές εγγραφές
αρκετές φορές ταχύτερες ανά εγγραφή από τις μεμονωμένες κλήσεις. Οι μαζικές εγγραφές DocStore εξακολουθούν
να συγχρονίζουν κάθε αρχείο εγγραφής· μειώνουν τις επαναλήψεις κλειδώματος, όχι τα fsync.
API μαζικών λειτουργιών του DocStore:
$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:
$log->appendMany([
['type' => 'page.saved'],
['type' => 'page.rendered'],
]);
$log->appendStream($largeIterable);
API μαζικών λειτουργιών του Queue:
$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/), ώστε οι παλιές περίοδοι να μπορούν να αρχειοθετηθούν
ή να διαγραφούν ως ολόκληροι κατάλογοι:
$daily = new Storh\SegmentedLog($root, 'events', partition: 'daily');
$monthly = new Storh\SegmentedLog($root, 'events', partition: 'monthly');
Η διατήρηση διαγράφει εγγραφές αρχείου καταγραφής παλαιότερες από ένα όριο και συμπυκνώνει τον χώρο που ανακτήθηκε· το purgeDone αφαιρεί από τη μνήμη τις ολοκληρωμένες εργασίες ουράς:
$deleted = $log->retain()->olderThanDays(90)->compact();
$queue->purgeDone(olderThanSeconds: 86400);