13.7. Блокировка и индексы#
13.7. Блокировка и индексы #
Хотя Tantor BEпредоставляет неблокирующий доступ для чтения/записи к данным таблицы, неблокирующий доступ для чтения/записи в настоящее время не предлагается для каждого реализованного метода доступа к индексу в Tantor BE. Различные типы индексов обрабатываются следующим образом:
- B-tree, GiST and SP-GiST indexes
Краткосрочные разделяемые/исключительные блокировки на уровне страниц используются для чтения/записи. Блокировки освобождаются немедленно после каждого извлечения или вставки строки индекса. Эти типы индексов обеспечивают наивысшую многопоточность без возникновения взаимоблокировок.
- Hash indexes
Используются эксклюзивные хеш-бакетные блокировки для чтения/записи доступа. Блокировки освобождаются после обработки всего бакета. Блокировки на уровне бакета обеспечивают лучшую параллельность, чем блокировки на уровне индекса, но возможны взаимные блокировки, так как блокировки удерживаются дольше, чем одна операция индекса.
- GIN indexes
Краткосрочные блокировки на уровне страницы, используемые для чтения/записи, используются для доступа. Блокировки освобождаются немедленно после извлечения или вставки каждой строки индекса. Но обратите внимание, что вставка значения с индексом GIN обычно приводит к нескольким вставкам ключей индекса на одну строку, поэтому GIN может выполнять значительную работу для вставки одного значения.
В настоящее время индексы B-дерева обеспечивают лучшую производительность для параллельных приложений; поскольку они также имеют больше возможностей, чем хеш-индексы, они рекомендуются как тип индекса для параллельных приложений, которым необходимо индексировать скалярные данные. При работе с нескалярными данными B-деревья не являются полезными, и вместо них следует использовать индексы GiST, SP-GiST или GIN.