Альткойны

Создание репликационно-безопасных LSM деревьев в Postgres: улучшение производительности и надежности баз данных

Альткойны
Building Replication-Safe LSM Trees in Postgres

Подробный разбор особенностей построения репликационно-безопасных Log-Structured Merge (LSM) деревьев в Postgres, включая проблемы с репликацией, влияние VACUUM и решения на основе hot_standby_feedback для обеспечения физической и логической консистентности данных на репликах.

Log-Structured Merge Tree, или LSM дерево, представляет собой специализированную структуру данных, которая в последние годы приобрела популярность в системах с интенсивной записью, таких как RocksDB, Cassandra и теперь Postgres. Основная идея LSM дерева заключается в оптимизации операций записи за счет превращения случайных записей в последовательные. Это достигается путем первичного сохранения данных в памяти в структуре, называемой memtable, а затем периодического сброса этих данных на диск в виде сегментированных файлов, упорядоченных по времени записи. Со временем эти сегменты объединяются в более крупные уровни через процесс, известный как компактация. Такая архитектура позволяет значительно увеличить скорость вставки и обновления данных, что особенно важно для сценариев с высокими нагрузками, таких как онлайн-поиск и аналитика в реальном времени.

Postgres традиционно использовал структуру данных типа B-дерево или GIN для полнотекстового поиска. Однако, несмотря на эффективность поиска, эти индексы нередко становятся узким местом при больших объемах записей, замедляя производительность при интенсивной нагрузке на запись. Внедрение LSM деревьев в Postgres должно было стать ответом на эту проблему, обеспечивая улучшенную пропускную способность записи и сокращая время индексации. Тем не менее, переход на LSM деревья в Postgres не прошел без сложностей. Основной вызов состоял в сохранении репликационной безопасности — способности поддерживать консистентное и надежное дублирование данных на репликах.

Postgres обеспечивает два типа репликации: физическую и логическую. Физическая репликация основывается на технологии Write-Ahead Logging (WAL), где изменения на первичном узле транслируются на реплицируемые узлы на уровне блоков данных. Логическая репликация работает выше, передавая изменения строк по отдельности. При этом LSM деревья, из-за своей сложной структуры, нарушали целостность процессов физической репликации по умолчанию. Проблемы физической репликации с LSM деревьями связаны с атомарностью обновлений.

В Postgres заметной особенностью является отсутствие возможности воспроизведения блокировок транзакций на репликах, так как это существенно замедлило бы производительность. Вместо этого, система полагается на пакетное применение изменений к отдельным блокам памяти, обеспечивая их последовательное и атомарное изменение. Однако операции, охватывающие несколько блоков данных одновременно, в том числе и связанные с LSM деревьями, могут привести к промежуточным состояниям, которые реплики не смогут корректно воспроизвести, что в итоге приводит к структурной ошибке данных. Чтобы решить эту проблему, разработчики использовали метод Copy-on-Write, создавая копии структур данных в памяти, которые потом атомарно заменяются целиком. Такая техника помогает изолировать изменения и исключить возможность появления непоследовательного состояния на репликах.

В случае с LSM деревом это означает, что группа сегментов при компактации заменяется целиком, а не частично, что обеспечивает согласованное и безопасное обновление. Еще одна существенная проблема, влияющая на целостность репликации, — взаимодействие с процессом VACUUM. Данная операция в Postgres отвечает за очистку «мертвых» версий строк, которые появляются из-за особенностей системы многоверсионной совместимости транзакций (MVCC). При обновлении или удалении строк предыдущие версии не удаляются мгновенно, а остаются на диске для поддержки согласованности многопользовательских транзакций. VACUUM периодически очищает такие устаревшие данные, освобождая пространство и улучшая производительность.

Возникает сложность в том, что VACUUM запускается на основном сервере и его действия транслируются на реплики. Однако реплики могут одновременно обрабатывать долгие запросы, которые еще используют «мертвые» строки, но VACUUM на основном сервере в это время уже счел эти данные неактуальными. Это приводит к конфликтам и возможным ошибкам при чтении на репликах, поскольку они пытаются получить доступ к удаленным данным. Данная проблема обостряется при использовании LSM деревьев, где компактация данных происходит постоянно, порой несколько раз в секунду. Таким образом, риск возникновения конфликтов и сбоев на репликах значительно возрастает, особенно под высокими нагрузками записи.

Для решения данной проблемы Postgres предлагает настройку hot_standby_feedback. Эта опция позволяет репликам сообщать основному серверу минимальную точку снимка транзакций (xmin), которая используется в активных запросах. Иными словами, реплики уведомляют, какие версии данных своим запросам еще необходимы, заставляя основной сервер отложить очистку VACUUM до тех пор, пока эти запросы не завершатся. Благодаря hot_standby_feedback основной сервер удерживает «мертвые» версии данных до безопасного момента, что значительно снижает вероятность возникновения ошибок в процессе репликации. Для систем с LSM деревьями, таких как pg_search — расширение Postgres для поиска — эта функция является ключевым элементом, гарантирующим логическую консистентность данных на репликах.

Тем не менее, стоит понимать, что использование hot_standby_feedback — это компромисс. Отсрочка очистки VACUUM может привести к увеличению объема неподчищенных данных и, как следствие, росту потребления места на диске. Поэтому внедрение этой опции должно сопровождаться мониторингом и настройкой времени выполнения VACUUM, а также управления размером таблиц и индексов. В результате комплексного подхода — использования атомарных операций на уровне блоков с Copy-on-Write, а также применения hot_standby_feedback — разработчикам удалось создать LSM дерево, работающее внутри Postgres с поддержкой физической и логической консистентности в условиях репликации. Это позволило значительно повысить пропускную способность записи без ущерба надежности и целостности данных.

Автоматическая торговля на криптовалютных биржах Покупайте и продавайте криптовалюты по лучшим курсам Privatejetfinder.com (RU)

Далее
Accelerating Scientific Discovery with AI
Среда, 01 Октябрь 2025 Ускорение научных открытий с помощью искусственного интеллекта: новый этап развития науки

Искусственный интеллект приходит на помощь учёным, автоматизируя ключевые этапы научных исследований и раскрывая новые возможности для быстрого и эффективного решения сложных научных задач. Современные AI-платформы меняют подход к обработке науки, помогая справляться с объёмами информации и ускоряя путь к открытиям.

The Birth-Rate Crisis Isn't as Bad as You've Heard–It's Worse
Среда, 01 Октябрь 2025 Кризис рождаемости: причины, последствия и прогнозы для будущего мира

Уменьшение рождаемости в глобальном масштабе представляет собой серьезный вызов для экономики и общества. Рассматриваются причины падения рождаемости в разных странах, а также влияние демографических изменений на будущее человечества.

Self-hosting Trigger.dev v4 using Docker
Среда, 01 Октябрь 2025 Самостоятельный хостинг Trigger.dev v4 с помощью Docker: полный обзор и рекомендации

Подробное руководство по самостоятельному размещению Trigger. dev версии 4 с применением Docker.

The cosmic distance ladder with Terence Tao: part two [video]
Среда, 01 Октябрь 2025 Космическая лестница расстояний: как Терренс Тао раскрывает тайны масштабов Вселенной

Погружение в методы измерения расстояний в космосе и объяснение значимости «космической лестницы» с участием математика Терренса Тао и видеоэстета 3Blue1Brown, раскрывающее достижения и оставшиеся загадки астрофизики.

Be on the Lookout for 'Scattered Spider' Hackers
Среда, 01 Октябрь 2025 Опасность для страхового сектора: киберугроза от группы 'Scattered Spider'

Страховая отрасль в центре внимания новой волны кибератак: группа хакеров 'Scattered Spider' меняет направление своих атак с ритейла на страховые компании, используя социальную инженерию и сложные методы взлома. Рассмотрены особенности угрозы, ее последствия и рекомендации по защите.

How do you "effortlessly reply" from any-email AT your_domain.tld?
Среда, 01 Октябрь 2025 Как без усилий отвечать с любого адреса вашей доменной почты

Подробное руководство по настройке почтовых сервисов для удобного ответа с любого адреса в вашем домене, обеспечивающее практические советы по организации отправки и получения писем без лишних затрат и хлопот.

Weeks Later, Erie and Philadelphia Insurance Still Working to Restore Networks
Среда, 01 Октябрь 2025 Восстановление сетей после кибератак: как страховые компании Erie и Philadelphia борются с последствиями инцидентов

Страховые компании Erie и Philadelphia продолжают работать над восстановлением своих сетевых систем после серьезных кибератак, которые нарушили их работу более двух недель назад. В статье рассматриваются детали инцидентов, предпринимаемые меры по обеспечению безопасности и возможные последствия для клиентов и индустрии страхования в целом.