Gå til indhold

Indekser

DocStore-indekser gemmes ved siden af samlingen under .storh/indexes. De er almindelige filer, der udelukkende afledes af posterne, og kan genopbygges når som helst. Deklarér dem med en flydende syntaks eller via et skema:

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

Indekstyper:

  • lighedsindekser for felter som kind eller status: én fil pr. unik værdi, så et punktopslag kun læser den tilsvarende værdifil
  • unikhedsindekser for felter som slug: håndhæves ved skrivning; en dubletværdi afviser put(), før noget skrives
  • områdeindekser for skalarværdier: en sorteret fil med sparsomme søgepunkter, der håndterer gt, gte, lt, lte, between og prefix

Områdeindekser kan også besvare orderBy på samme felt med en limit direkte fra indeksrækkefølgen, stigende eller faldende, uden at materialisere og sortere hele resultatet.

Når en forespørgsel kombinerer to eq-betingelser på ikke-unikke lighedsindekserede felter, kan storh bruge en automatisk sammensat bucket for det pågældende feltpar. Det gør selektive filtre på to felter hurtige uden at kræve en ekstra indeksdeklaration.

Konsistens og reparation

Skrivninger opdaterer indeksindgange, efter at postfilen er udskiftet atomisk og under samlingens skrivelås, så poster og indekser ændres samlet. verify() sammenligner hvert indeks med en fuld scanning af posterne og rapporterer afvigelser; reindex() genopbygger alle konfigurerede indekser fra postfilerne; repair() sætter korrupte poster i karantæne og genopbygger derefter indekserne.

PHP
$docs->reindex();

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

explain() returnerer index_scan, når forespørgselsplanlæggeren kan bruge et konfigureret indeks, og full_scan ellers.