Dizinler
DocStore dizinler, koleksiyonun yanında .storh/indexes altında saklanır.
Bunlar tümüyle kayıtlardan türetilen sıradan dosyalardır ve istenen zaman yeniden oluşturulabilir. Akıcı biçimde veya bir
şema aracılığıyla tanımlayın:
$docs->indexes()
->field('slug')->unique()
->field('kind')
->field('publishedAt')->range()
->sync();
Dizin türleri:
kindveyastatusgibi alanlar için eşitlik dizinleri: her farklı değer için bir dosya; böylece tekil aramada yalnızca eşleşen değer dosyası okunursluggibi alanlar için benzersiz dizinler: yazma anında uygulanır; yinelenen bir değer, herhangi bir şey yazılmadan önceput()işlemini başarısız kılar- Skaler değerler için aralık dizinleri: seyrek arama kontrol noktaları içeren sıralı bir dosya;
gt,gte,lt,lte,betweenveprefixişlemlerini sunar
Aralık dizinleri aynı alandaki orderBy işlemlerini de, tüm sonucu belleğe alıp sıralamadan, artan veya azalan biçimde doğrudan dizin sırasından yanıtlayabilir; bunun için bir limit kullanılır.
Bir sorgu, benzersiz olmayan ve eşitlik dizinli alanlarda iki eq koşulunu birleştirdiğinde, storh bu alan çifti için otomatik bir bileşik kova kullanabilir. Böylece başka bir dizin tanımlamaya gerek kalmadan iki alanlı seçici filtreler hızlı çalışır.
Tutarlılık ve onarım
Yazmalar, kayıt dosyası atomik olarak değiştirildikten sonra koleksiyon yazma kilidi altında dizin girdilerini günceller; böylece kayıtlar ve dizinler birlikte ilerler.
verify() her dizini tam kayıt taramasıyla karşılaştırır ve tutarsızlıkları bildirir;
reindex() yapılandırılmış her dizini kayıt dosyalarından yeniden oluşturur; repair() bozuk kayıtları karantinaya alır ve ardından dizinleri yeniden oluşturur.
$docs->reindex();
$plan = $docs
->query()
->where('slug')->eq('home')
->explain();
explain(), planlayıcı yapılandırılmış bir dizini kullanabildiğinde index_scan, aksi durumda full_scan döndürür.