WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

BRIN (от англ. Block Range Index) — техника индексации данных, предназначенная для обработки больших[1] таблиц, в которых значение индексируемого столбца имеет некоторую естественную корреляцию с физическим положением строки в таблице. Они обладают такими качествами партиционированных таблиц, как быстрая вставка строки, быстрое создание индекса, без необходимости явного объявления партиций.[2]

Может использоваться для географических данных[3], временных рядов[4], логов или истории заказов магазина, которые пишутся последовательно, а потому некоторые колонки (дата, время, номер) частично упорядочены уже на физическом уровне, и в то же время таблицы с такими данными обычно разрастаются до гигантских размеров. Ускоряет операторы сравнения, но не влияет на like-запросы.[5]. BRIN — не уникальный индекс[6], поэтому не может использоваться в качестве индекса первичного ключа.[7]

BRIN-индексы были впервые предложены Alvaro Herrera из компании 2ndQuadrant в 2013 году под названием «Minmax-индексы». Поддержка была заявлена в PostgreSQL с версии 9.5[8]. В других СУБД есть похожие возможности, в том числе в Oracle[9][10], Netezza («zone maps»), en:Infobright («data packs»), en:MonetDBand, Apache Hive с ORC/Parquet.

Архитектура

Структура индекса B-tree
Структура индекса BRIN

BRIN оперирует описаниями больших блоков данных, где хранится минимальное и максимальное значение индексируемого столбца внутри блока. Во время запросов сначала фильтруются блоки (условия запроса применяется к описанию блока). Таким образом, за небольшое число проверок сокращается набор данных, которые надо будет проверять построчно.[11]

СУБД PostgreSQL хранит данные в «страницах», каждая таблица или индекс — это последовательность страниц. Стандартный размер страницы — 8 килобайт.[12] Блок или блоковый диапазон (англ. «a block range») — это группа страниц (а не строк), которые идут друг за другом в таблице. Блок в данном случае — часть индекса, а не таблицы: его размер можно определить в момент создания индекса параметром pages_per_range.[13]

По мере того, как страницы наполняются данными, информация о блоках обновляется. Не каждой странице соответствует блок, недавно созданные страницы могут не иметь блока (создание новых блоков в индексе происходит, например, во время операции VACUUM на таблице).

BRIN настолько компактный, что может помещаться целиком в оперативную память, уменьшая количество дисковых операций во время запроса. Это не всегда справедливо для индексов B-tree, которые нуждаются в узле дерева на приблизительно каждые N строк таблицы, где N — вместимость одного узла. Размер индекса B-tree значителен и может быть сопоставим с объёмом данных в индексируемой колонке таблицы.

См. также

  • GiST — индекс для like-запросов.
  • Gin — еще один индекс для like-запросов. Он в 3 раза медленнее обновляется, чем GiST, но в 3 раза быстрее находит данные.[14]

Примечания

  1. Больших в смысле количества строк, а не размера полей или абсолютного размера таблицы в байтах.
  2. Mark Wong. Loading Tables and Creating B-tree and Block Range Indexes. AXLE project (October 10, 2014).
  3. https://2016.foss4g-na.org/sites/default/files/slides/gbroccolo_FOSS4GNA_PGDay2016_brin4postgis.pdf
  4. BRIN indexes, what are they and how do you use them?
  5. Table 62-1. Built-in BRIN Operator Classes
  6. When should I use BRIN indexes? : PostgreSQL
  7. How to promote an existing index to primary key in PostgreSQL - Database Administrators Stack Exchange
  8. PostgreSQL: Documentation: 9.5: Release 9.5
  9. Arup Nanda (May–June 2011). “Smart Scans Meet Storage Indexes”. Oracle Magazine. Oracle.
  10. Oracle Sun Database Machine Application Best Practices for Data Warehousing. Oracle.
  11. commitdiff - BRIN: Block Range Indexes. git.postgresql.org (7 November 2014). Проверено 3 октября 2017.
  12. PostgreSQL: Documentation: 8.0: Database Page Layout
  13. PostgreSQL: Documentation: 9.5: Introduction
  14. Difference between GiST and GIN index. stackoverflow.com. Проверено 11 апреля 2018.

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2025
WikiSort.ru - проект по пересортировке и дополнению контента Википедии