BRIN

BRIN ( Block  Range In dex ) je technika indexování dat navržená pro zpracování velkých [1] tabulek , ve kterých má hodnota indexovaného sloupce určitou přirozenou korelaci s fyzickou pozicí řádku v tabulce . Mají takové kvality dělených tabulek, jako je rychlé vkládání řádků, rychlé vytváření indexů, bez nutnosti explicitně deklarovat oddíly. [2]

Lze použít pro geografická data [3] , časové řady [4] , protokoly nebo historii objednávek obchodu, které se zapisují sekvenčně, a proto jsou některé sloupce (datum, čas, číslo) již částečně řazeny na fyzické úrovni a na stejné časové tabulky s takovými údaji obvykle narostou do gigantických rozměrů. Zrychluje operátory porovnání, ale neovlivňuje podobné dotazy. [5] . BRIN není jedinečný index [6] , a proto jej nelze použít jako index primárního klíče. [7]

Indexy BRIN poprvé navrhl Alvaro Herrera z 2. kvadrantu v roce 2013 pod názvem „Minmax indexy“. Podpora byla oznámena v PostgreSQL od verze 9.5 [8] . Jiné DBMS mají podobné schopnosti, včetně Oracle [9] [10] , Netezza ("mapy zón"), en:Infobright ("datové balíčky"), en:MonetDBand , Apache Hive s ORC/Parquet.

Architektura

BRIN pracuje s popisy velkých datových bloků, kde jsou uloženy minimální a maximální hodnoty indexovaného sloupce v rámci bloku. Během požadavků jsou bloky nejprve filtrovány (podmínky dotazu jsou aplikovány na popis bloku). Pro malý počet kontrol se tedy zmenšuje datová sada, která bude muset být kontrolována řádek po řádku. [jedenáct]

PostgreSQL DBMS ukládá data do "stránek", každá tabulka nebo index je sekvence stránek. Standardní velikost stránky je 8 kilobajtů. [12] Blok nebo rozsah bloků je skupina stránek (nikoli řádků), které následují za sebou v tabulce. Blok je v tomto případě součástí indexu, nikoli tabulky: jeho velikost lze určit v okamžiku vytvoření indexu pomocí parametru pages_per_range. [13]

Jakmile se stránky zaplní daty, informace o bloku se aktualizují. Ne každá stránka odpovídá bloku, nedávno vytvořené stránky nemusí mít blok (k vytváření nových bloků v indexu dochází např. při operaci VACUUMna tabulce).

BRIN je tak kompaktní, že se celý vejde do paměti RAM, což snižuje počet diskových operací během dotazu. To neplatí vždy pro indexy B-stromu, které potřebují uzel stromu pro přibližně každých N řádků tabulky, kde N je kapacita jednoho uzlu. Velikost indexu B-stromu je významná a může být srovnatelná s množstvím dat ve sloupci indexované tabulky.

Viz také

Poznámky

  1. Velké z hlediska počtu řádků, nikoli velikosti polí nebo absolutní velikosti tabulky v bajtech.
  2. Mark Wong. Načítání tabulek a vytváření indexů B-stromu a rozsahu bloků . Projekt AXLE (10. října 2014). Datum přístupu: 7. února 2018. Archivováno z originálu 4. března 2016.
  3. Archivovaná kopie (odkaz není dostupný) . Získáno 7. srpna 2017. Archivováno z originálu dne 7. srpna 2017. 
  4. BRIN indexy, co to je a jak je používáte? . Staženo 7. února 2018. Archivováno z originálu 8. února 2018.
  5. Tabulka 62-1. Vestavěné třídy operátorů BRIN . Získáno 7. srpna 2017. Archivováno z originálu dne 7. srpna 2017.
  6. Kdy bych měl používat indexy BRIN? : PostgreSQL . Získáno 8. února 2018. Archivováno z originálu dne 8. dubna 2021.
  7. Jak povýšit existující index na primární klíč v PostgreSQL - Database Administrators Stack Exchange . Staženo 8. února 2018. Archivováno z originálu 9. února 2018.
  8. PostgreSQL: Dokumentace: 9.5: Vydání 9.5 . Datum přístupu: 7. února 2018. Archivováno z originálu 9. března 2018.
  9. Arup Nanda. Smart Scans Meet Storage Indexes  (neopr.)  // Oracle Magazine. — Oracle Corp. Archivováno z originálu 8. února 2018.
  10. Nejlepší postupy aplikace Oracle Sun Database Machine pro datové sklady . Věštec. Datum přístupu: 7. února 2018. Archivováno z originálu 15. března 2016.
  11. Herrera, Alvaro commitdiff - BRIN: Indexy rozsahu bloků . git.postgresql.org (7. listopadu 2014). Získáno 3. října 2017. Archivováno z originálu 19. ledna 2019.
  12. PostgreSQL: Dokumentace: 8.0: Rozvržení stránky databáze . Datum přístupu: 7. února 2018. Archivováno z originálu 9. března 2018.
  13. PostgreSQL: Dokumentace: 9.5: Úvod . Získáno 7. srpna 2017. Archivováno z originálu dne 7. srpna 2017.
  14. Rozdíl mezi indexem GiST a GIN . www.stackoverflow.com Datum přístupu: 11. dubna 2018.

Odkazy