Μετάβαση στο περιεχόμενο

UUIDv7

Κάθε αναγνωριστικό εγγραφής storh είναι UUIDv7: χρονοσήμανση 48 bit σε χιλιοστά του δευτερολέπτου, ακολουθούμενη από τυχαία εντροπία, με μορφοποίηση τυπικού UUID 36 χαρακτήρων. Επειδή η χρονοσήμανση προηγείται, τα αναγνωριστικά ταξινομούνται με βάση τον χρόνο δημιουργίας και αυτή η ιδιότητα τροφοδοτεί τις περισσότερες λειτουργίες του storh: σελιδοποίηση με δρομέα (after($id)), αναγνώσεις χρονικών διαστημάτων, παράλειψη τμημάτων στο αρχείο καταγραφής και σταθερή ταξινόμηση παντού.

PHP
$id = Storh\UuidV7::generate();

Storh\UuidV7::is_valid($id);          // bool, accepts upper and lower case
Storh\UuidV7::assert_valid($id);      // throws StorageException instead
$timestampMs = Storh\UuidV7::timestamp_ms($id);

Η δημιουργία είναι μονοτονική μέσα σε μια διεργασία: τα αναγνωριστικά που δημιουργούνται στο ίδιο χιλιοστό του δευτερολέπτου αυξάνουν την προηγούμενη εντροπία αντί να την επαναδημιουργούν τυχαία, ώστε ακόμη και οι γρήγορες ριπές εγγραφών να ταξινομούνται με τη σειρά δημιουργίας.

Πρόσβαση βάσει χρόνου

Για χρονικά διαστήματα, το storh παράγει τα μικρότερα και μεγαλύτερα δυνατά UUIDv7 για μια χρονοσήμανση σε χιλιοστά του δευτερολέπτου και συγκρίνει τα αναγνωριστικά με αυτά τα όρια:

PHP
$query = Storh\RecordQuery::all()->time_range_ms(
    1_700_000_000_000,
    1_700_000_060_000,
);

$lower = Storh\UuidV7::min_for_timestamp_ms(1_700_000_000_000);
$upper = Storh\UuidV7::max_for_timestamp_ms(1_700_000_060_000);

Γι' αυτό οι αναγνώσεις χρονικών διαστημάτων δεν χρειάζονται πεδίο χρονοσήμανσης στα δεδομένα της εγγραφής: το αναγνωριστικό περιέχει τον χρόνο δημιουργίας.

Παροχή δικών σας αναγνωριστικών

Όλες οι μηχανές δέχονται ρητό αναγνωριστικό ανά εγγραφή ($docs->put($data, $id)) και μια καλούμενη συνάρτηση id_generator στους κατασκευαστές τους. Τα αναγνωριστικά και από τις δύο διαδρομές επικυρώνονται ως UUIDv7, επομένως οι προσαρμοσμένες γεννήτριες πρέπει να τα παράγουν· οι ντετερμινιστικές γεννήτριες επιτρέπουν στη σουίτα δοκιμών να δημιουργεί επαναλήψιμα δεδομένα. Το UuidV7::reset_for_tests() εκκαθαρίζει τη μονοτονική κατάσταση σε επίπεδο διεργασίας μεταξύ περιπτώσεων δοκιμών.