Ugrás a tartalomhoz

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:

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

Indexfajták:

  • egyenlőségi indexek olyan mezőkhöz, mint a kind vagy a status: 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, a put() 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 és prefix

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.

PHP
$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.