Indexek
A DocStore indexek a gyűjtemény mellett, a .storh/indexes alatt találhatók. Közönséges fájlok, amelyek teljes egészében a rekordokból származnak, és bármikor újraépíthetők. Láncolt hívásokkal vagy sémán keresztül deklarálhatók:
$docs->indexes()
->field('slug')->unique()
->field('kind')
->field('publishedAt')->range()
->sync();
Indexfajták:
- egyenlőségi indexek olyan mezőkhöz, mint a
kindvagy astatus: külön fájl minden egyedi értékhez, így a közvetlen keresés csak az egyező érték fájlját olvassa be - egyedi indexek olyan mezőkhöz, mint a
slug: az íráskor érvényesülnek, és ha egy érték duplikált, aput()még az írás előtt meghiúsul - tartományindexek skalárértékekhez: rendezett fájl ritka keresési ellenőrzőpontokkal, amely a következőket szolgálja ki:
gt,gte,lt,lte,betweenésprefix
A tartományindexek ugyanazon a mezőn a orderBy műveletet is kiszolgálják limit segítségével, közvetlenül az index sorrendjéből, növekvő vagy csökkenő irányban, a teljes eredmény előállítása és rendezése nélkül.
Ha egy lekérdezés két eq feltételt kombinál nem egyedi, egyenlőségi indexelt mezőkön, a storh automatikus összetett gyűjtőt használhat az adott mezőpárhoz. Ez gyorsan tartja a szelektív, kétmezős szűréseket anélkül, hogy újabb indexet kellene deklarálni.
Konzisztencia és javítás
Az írások a rekordfájl atomi cseréje után, a gyűjtemény írási zárolása alatt frissítik az indexbejegyzéseket, így a rekordok és az indexek együtt változnak. A verify() teljes rekordbejárással összevet minden indexet, és jelzi az eltéréseket; a reindex() újraépíti az összes konfigurált indexet a rekordfájlokból; a repair() karanténba helyezi a sérült rekordokat, majd újraépít.
$docs->reindex();
$plan = $docs
->query()
->where('slug')->eq('home')
->explain();
A explain() a index_scan értéket adja vissza, ha a tervező használhat konfigurált indexet, egyébként pedig a full_scan értéket.