Interested Article - BRIN
- 2020-06-28
- 1
BRIN (от англ. B lock R ange In dex ) — техника индексации данных, предназначенная для обработки больших таблиц, в которых значение индексируемого столбца имеет некоторую естественную корреляцию с физическим положением строки в таблице. Они обладают такими качествами партиционированных таблиц, как быстрая вставка строки, быстрое создание индекса, без необходимости явного объявления партиций.
Может использоваться для географических данных , временных рядов , логов или истории заказов магазина, которые пишутся последовательно, а потому некоторые колонки (дата, время, номер) частично упорядочены уже на физическом уровне, и в то же время таблицы с такими данными обычно разрастаются до гигантских размеров. Ускоряет операторы сравнения, но не влияет на like-запросы. . BRIN — не уникальный индекс , поэтому не может использоваться в качестве индекса первичного ключа.
BRIN-индексы были впервые предложены Alvaro Herrera из компании 2ndQuadrant в 2013 году под названием «Minmax-индексы». Поддержка была заявлена в PostgreSQL с версии 9.5 . В других СУБД есть похожие возможности, в том числе в Oracle , Netezza («zone maps»), («data packs»), , Apache Hive с ORC/Parquet.
Архитектура
BRIN оперирует описаниями больших блоков данных, где хранится минимальное и максимальное значение индексируемого столбца внутри блока. Во время запросов сначала фильтруются блоки (условия запроса применяется к описанию блока). Таким образом, за небольшое число проверок сокращается набор данных, которые надо будет проверять построчно.
СУБД PostgreSQL хранит данные в «страницах», каждая таблица или индекс — это последовательность страниц. Стандартный размер страницы — 8 килобайт.
Блок или блоковый диапазон (англ. «a block range») — это группа страниц (а не строк), которые идут друг за другом в таблице. Блок в данном случае — часть индекса, а не таблицы: его размер можно определить в момент создания индекса параметром
pages_per_range
.
По мере того, как страницы наполняются данными, информация о блоках обновляется. Не каждой странице соответствует блок, недавно созданные страницы могут не иметь блока (создание новых блоков в индексе происходит, например, во время операции
VACUUM
на таблице).
BRIN настолько компактный, что может помещаться целиком в оперативную память, уменьшая количество дисковых операций во время запроса. Это не всегда справедливо для индексов B-tree, которые нуждаются в узле дерева на приблизительно каждые N строк таблицы, где N — вместимость одного узла. Размер индекса B-tree значителен и может быть сопоставим с объёмом данных в индексируемой колонке таблицы.
См. также
- GiST — индекс для like-запросов.
- Gin — еще один индекс для like-запросов. Он в 3 раза медленнее обновляется, чем GiST, но в 3 раза быстрее находит данные.
Примечания
- Больших в смысле количества строк, а не размера полей или абсолютного размера таблицы в байтах.
- Mark Wong. . AXLE project (10 октября 2014). Дата обращения: 7 февраля 2018. 4 марта 2016 года.
- . Дата обращения: 7 августа 2017. Архивировано из 7 августа 2017 года.
- Дата обращения: 7 февраля 2018. 8 февраля 2018 года.
- . Дата обращения: 7 августа 2017. 7 августа 2017 года.
- . Дата обращения: 8 февраля 2018. 8 апреля 2021 года.
- . Дата обращения: 8 февраля 2018. 9 февраля 2018 года.
- . Дата обращения: 7 февраля 2018. 9 марта 2018 года.
- Arup Nanda. (неопр.) // Oracle Magazine. — Oracle Corporation . 8 февраля 2018 года.
- . Oracle. Дата обращения: 7 февраля 2018. 15 марта 2016 года.
- Herrera, Alvaro . git.postgresql.org (7 ноября 2014). Дата обращения: 3 октября 2017. 19 января 2019 года.
- . Дата обращения: 7 февраля 2018. 9 марта 2018 года.
- . Дата обращения: 7 августа 2017. 7 августа 2017 года.
- . stackoverflow.com. Дата обращения: 11 апреля 2018.
Ссылки
-
(англ.)
:
- ( )
- 2020-06-28
- 1