UUIDv7
Her storh kayıt kimliği bir UUIDv7 değeridir: 48 bitlik bir milisaniye zaman damgasının ardından rastgele entropi gelir ve standart, 36 karakterlik bir UUID biçiminde gösterilir. Zaman damgası başta olduğundan kimlikler oluşturulma zamanına göre sıralanır. Bu özellik birçok işlevin temelidir: imleçle sayfalama (after($id)), zaman aralıklı okumalar, günlükte segment atlama ve her yerde tutarlı sıralama için storh.
$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);
Bir süreç içinde oluşturma sırası monotoniktir: aynı milisaniyede oluşturulan kimliklerde entropi yeniden rastgele seçilmek yerine önceki değerden artırılır; böylece hızlı yazma yoğunluklarında da oluşturma sırası korunur.
Zamana göre adresleme
Zaman aralıkları için storh, milisaniye zaman damgasına karşılık gelebilecek en küçük ve en büyük UUIDv7 değerlerini hesaplar ve kimlikleri bu sınırlarla karşılaştırır:
$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);
Bu nedenle zaman aralıklı okumalar için kayıt verisinde zaman damgası alanı gerekmez: oluşturulma zamanı kimliğin içindedir.
Kendi kimliklerinizi sağlama
Tüm motorlar, her yazma için açık bir kimlik ($docs->put($data, $id)) ve oluşturucularında bir id_generator çağrılabilir işlev kabul eder. Her iki yoldan gelen kimlikler UUIDv7 olarak doğrulandığından özel oluşturucular bu biçimde değer üretmelidir; test takımının tekrarlanabilir test verileri oluşturma yöntemi deterministik oluşturuculardır.
UuidV7::reset_for_tests(), test durumları arasında süreç düzeyindeki monotonik durumu temizler.