GiST

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 7. september 2017; checks kræver 13 redigeringer .

GiST ( Eng.  Generalized Search Tree , Generalized Search Tree) er en indeksstruktur, der er en generaliseret slags R-træ og giver standardmetoder til at navigere i træet og opdatere det (opdeling og sletning af noder). GiST er et balanceret (højde) træ, hvis endeknuder (blade) indeholder par (nøgle, rid), hvor nøgle er nøglen og rid er en pegepind til den tilsvarende indgang på datasiden. De interne noder indeholder (p, ptr) par, hvor p er et prædikat (brugt som opslagsnøgle), der kører på *alle* efterkommernoder, og ptr er en pegepind til en anden node i træet. Dette træ definerer de grundlæggende metoder SEARCH, INSERT, DELETE og en grænseflade til at skrive brugerdefinerede metoder, der kan styre driften af ​​disse (grundlæggende) metoder.

SEARCH-metoden styres af Consistent-funktionen, som returnerer 'true', hvis noden opfylder prædikatet, INSERT-metoden styres af penalty-, picksplit- og unionsfunktionerne, som giver os mulighed for at estimere kompleksiteten af ​​insert-operationen ind i noden , opdeler knudepunktet i tilfælde af overløb og genopbyg træet om nødvendigt, SLET-metoden finder et blad af træet , der indeholder nøglen, fjerner parret (nøgle, befri) og om nødvendigt, ved hjælp af unionsfunktionen, genopbygger forælderen noder [1] .

GiST er et direkte indeks, der bruges af PostgreSQL fuldtekstsøgning . Det betyder, at for hver tsvector, der beskriver alle tokens i dokumentet, oprettes en signatur, der beskriver, hvilke tokens der er inkluderet i denne tsvector. Funktionsprincippet ligner bitindeks, men der er forskelle.

Lad os demonstrere med et eksempel: lad tokenet w1 være forbundet med signaturen 001000, tokenet w2 - 000010. Så vil dokumentet, der kun indeholder tokens w1 og w2, blive forbundet med signaturen 001010 (001000 | 000010). I modsætning til bitindekser er kortlægningen af ​​tokens til signaturer ikke enestående, det vil sige, at eksistensen af ​​et token w3 med signaturen 001000 er mulig. Dette giver mulighed for betydelige besparelser på størrelsen af ​​indekset, men kræver en sekundær kontrol for et fuldstændigt match mellem forespørgslen og dokument-tokens.

Det er også værd at bemærke, at hvis anmodningstokenet har en signatur, for eksempel 000001, så indeholder dokumentet med signaturen 001010 det bestemt ikke, på trods af tvetydigheden af ​​tokenmapping.

Fordelen ved GiST er dens oprettelseshastighed og indeksstørrelse sammenlignet med GiN (3 gange), så det er at foretrække for dynamisk konstant opdaterede data. For statiske eller sjældent opdaterede data er et GiN-indeks at foretrække (det søger 3 gange hurtigere) [2] .

Noter

  1. Skrivning af PostgreSQL-udvidelser ved hjælp af GiST . www.sai.msu.su Hentet 13. november 2017. Arkiveret fra originalen 8. november 2017.
  2. Marko Ćilimkovic. Eksperimenter med indekser – hvor vigtige er de? | Bambus Lab . bamboolab.eu Dato for adgang: 7. januar 2018. Arkiveret fra originalen 8. januar 2018.

Kilder

  1. En introduktion til fuldtekstsøgning i PostgreSQL (dødt link) . Hentet 23. maj 2010. Arkiveret fra originalen 19. juni 2012. 
  2. Skriveudvidelser til PostgreSQL ved hjælp af GiST .