BRIN

BRIN ( Bloc  Range In dex ) este o tehnică de indexare a datelor concepută pentru a procesa tabele mari [1] în care valoarea coloanei indexate are o oarecare corelație naturală cu poziția fizică a rândului în tabel . Au calități ale tabelelor partiționate precum inserarea rapidă a rândurilor, crearea rapidă a indexului, fără a fi nevoie să declare în mod explicit partițiile. [2]

Poate fi folosit pentru date geografice [3] , serii cronologice [4] , jurnalele sau istoricul comenzilor din magazin, care sunt scrise secvențial și, prin urmare, unele coloane (data, ora, număr) sunt deja parțial ordonate la nivel fizic și la nivel aceleași tabele de timp cu astfel de date cresc de obicei la dimensiuni gigantice. Accelerează operatorii de comparare, dar nu afectează interogările similare. [5] . BRIN nu este un index unic [6] și, prin urmare, nu poate fi utilizat ca index de cheie primară. [7]

Indicii BRIN au fost propuși pentru prima dată de Alvaro Herrera din 2ndQuadrant în 2013 sub numele „Indici Minmax”. Suportul a fost anunțat în PostgreSQL începând cu versiunea 9.5 [8] . Alte SGBD-uri au capabilități similare, inclusiv Oracle [9] [10] , Netezza ("hărți de zonă"), en:Infobright ("pachete de date"), en:MonetDBand , Apache Hive cu ORC/Parquet.

Arhitectură

BRIN operează cu descrieri ale blocurilor mari de date, unde sunt stocate valorile minime și maxime ale coloanei indexate din bloc. În timpul solicitărilor, blocurile sunt filtrate mai întâi (condițiile de interogare sunt aplicate descrierii blocului). Astfel, pentru un număr mic de verificări, setul de date care va trebui verificat linie cu linie este redus. [unsprezece]

PostgreSQL DBMS stochează date în „pagini”, fiecare tabel sau index este o secvență de pagini. Dimensiunea standard a paginii este de 8 kiloocteți. [12] Un bloc sau un interval de blocuri este un grup de pagini (nu rânduri) care se succed într-un tabel. Blocul în acest caz face parte din index, nu din tabel: dimensiunea acestuia poate fi determinată în momentul în care indexul este creat cu parametrul pages_per_range. [13]

Pe măsură ce paginile sunt umplute cu date, informațiile de bloc sunt actualizate. Nu fiecare pagină corespunde unui bloc, este posibil ca paginile create recent să nu aibă un bloc (crearea de noi blocuri în index are loc, de exemplu, în timpul unei operațiuni VACUUMpe un tabel).

BRIN este atât de compact încât se poate încadra în totalitate în RAM, reducând numărul de operațiuni pe disc în timpul unei interogări. Acest lucru nu este întotdeauna valabil pentru indicii de arbore B, care au nevoie de un nod de arbore pentru aproximativ fiecare N rânduri de tabel, unde N este capacitatea unui nod. Dimensiunea unui index B-tree este semnificativă și poate fi comparabilă cu cantitatea de date din coloana tabelului indexat.

Vezi și

Note

  1. Mare în ceea ce privește numărul de linii, nu dimensiunea câmpurilor sau dimensiunea absolută a tabelului în octeți.
  2. Mark Wong. Încărcarea tabelelor și crearea indicilor B-tree și Block Range . Proiect AXLE (10 octombrie 2014). Data accesului: 7 februarie 2018. Arhivat din original pe 4 martie 2016.
  3. Copie arhivată (link nu este disponibil) . Preluat la 7 august 2017. Arhivat din original la 7 august 2017. 
  4. Indicii BRIN, ce sunt și cum îi folosiți? . Consultat la 7 februarie 2018. Arhivat din original pe 8 februarie 2018.
  5. Tabelul 62-1. Clasele de operator BRIN încorporate . Preluat la 7 august 2017. Arhivat din original la 7 august 2017.
  6. Când ar trebui să folosesc indici BRIN? : PostgreSQL . Preluat la 8 februarie 2018. Arhivat din original la 8 aprilie 2021.
  7. Cum să promovați un index existent la cheie primară în PostgreSQL - Administratorii de baze de date Stack Exchange . Consultat la 8 februarie 2018. Arhivat din original pe 9 februarie 2018.
  8. PostgreSQL: Documentație: 9.5: Versiunea 9.5 . Data accesului: 7 februarie 2018. Arhivat din original pe 9 martie 2018.
  9. Arup Nanda. Scanările inteligente îndeplinesc indecșii de stocare  (neopr.)  // Oracle Magazine. - Oracle Corp. Arhivat din original pe 8 februarie 2018.
  10. Cele mai bune practici pentru aplicația Oracle Sun Database Machine pentru depozitarea datelor . Oracol. Data accesului: 7 februarie 2018. Arhivat din original pe 15 martie 2016.
  11. Herrera, Alvaro commitdiff - BRIN: Block Range Indexes . git.postgresql.org (7 noiembrie 2014). Preluat la 3 octombrie 2017. Arhivat din original la 19 ianuarie 2019.
  12. PostgreSQL: Documentație: 8.0: Aspectul paginii bazei de date . Data accesului: 7 februarie 2018. Arhivat din original pe 9 martie 2018.
  13. PostgreSQL: Documentație: 9.5: Introducere . Preluat la 7 august 2017. Arhivat din original la 7 august 2017.
  14. Diferența dintre indicele GiST și GIN . www.stackoverflow.com Data accesului: 11 aprilie 2018.

Link -uri