Preskočiť na obsah

Indexy

DocStore indexy sa ukladajú vedľa kolekcie do .storh/indexes. Sú to bežné súbory odvodené výlučne zo záznamov a možno ich kedykoľvek znova vytvoriť. Deklarujte ich plynulo alebo prostredníctvom schémy:

PHP
$docs->indexes()
    ->field('slug')->unique()
    ->field('kind')
    ->field('publishedAt')->range()
    ->sync();

Typy indexov:

  • indexy rovnosti pre polia ako kind alebo status: jeden súbor pre každú jedinečnú hodnotu, takže vyhľadávanie konkrétnej hodnoty číta iba zodpovedajúci súbor
  • jedinečné indexy pre polia ako slug: vynucujú sa pri zápise, duplicitná hodnota spôsobí zlyhanie put() ešte pred zápisom
  • rozsahové indexy pre skalárne hodnoty: zoradený súbor so riedkymi kontrolnými bodmi na preskakovanie, ktorý podporuje gt, gte, lt, lte, between a prefix

Rozsahové indexy dokážu na tom istom poli odpovedať aj na orderBy pomocou limit priamo v poradí indexu, vzostupne alebo zostupne, bez materializácie a zoradenia celého výsledku.

Keď dotaz kombinuje dva predikáty eq na poliach s indexom rovnosti, ktoré nie sú jedinečné, storh môže pre túto dvojicu polí použiť automatický zložený blok. Vďaka tomu zostávajú selektívne filtre podľa dvoch polí rýchle bez potreby deklarovať ďalší index.

Konzistentnosť a oprava

Zápisy aktualizujú položky indexu po atómovom nahradení súboru záznamu, pod zámkom zápisu kolekcie, takže záznamy a indexy sa menia spoločne. verify() porovná každý index s úplným skenovaním záznamov a nahlási odchýlky; reindex() znova vytvorí každý nakonfigurovaný index zo súborov záznamov; repair() presunie poškodené záznamy do karantény a potom indexy znova vytvorí.

PHP
$docs->reindex();

$plan = $docs
    ->query()
    ->where('slug')->eq('home')
    ->explain();

explain() vráti index_scan, keď plánovač môže použiť nakonfigurovaný index, a full_scan v opačnom prípade.