Поделиться через


Что такое гарантии ACID в Azure Databricks?

Azure Databricks использует Delta Lake по умолчанию для всех операций чтения и записи и сборки на основе гарантий ACID, предоставляемых протоколом открытый код Delta Lake. ACID обозначает атомарность, согласованность, изоляцию и устойчивость.

  • Атомарность означает, что все транзакции либо завершаются успешно, либо завершаются сбоем полностью.
  • Гарантии согласованности связаны с тем, как данное состояние данных наблюдается одновременными операциями.
  • Изоляция означает, как одновременные операции потенциально конфликтуют друг с другом.
  • Устойчивость означает, что зафиксированные изменения являются постоянными.

Хотя многие технологии обработки и хранения данных описывают транзакции ACID, определенные гарантии зависят от системы, а транзакции в Azure Databricks могут отличаться от других систем, с которыми вы работали.

Примечание.

На этой странице описываются гарантии для таблиц, поддерживаемых Delta Lake. Другие форматы данных и интегрированные системы могут не предоставлять транзакционные гарантии для операций чтения и записи.

Все записи Azure Databricks в облачное хранилище объектов используют транзакционные фиксации, которые создают файлы метаданных, начиная с _started_<id> файлов данных и _committed_<id> наряду с файлами данных. Эти файлы не нужно взаимодействовать, так как Azure Databricks обычно очищает устаревшие файлы метаданных фиксации.

Как выполняются транзакции в Azure Databricks?

Azure Databricks управляет транзакциями на уровне таблицы. Транзакции всегда применяются к одной таблице за раз. Для управления параллельными транзакциями Azure Databricks использует управление оптимистическим параллелизмом. Это означает, что нет блокировок для чтения или записи в таблицу, и взаимоблокировка не является возможностью.

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

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

Azure Databricks не имеет BEGIN/END конструкций, которые позволяют группировать несколько операций в виде одной транзакции. Приложения, изменяющие несколько таблиц, фиксируют транзакции в каждой таблице последовательно. Вы можете объединить вставки, обновления и удаления таблицы в одну транзакцию записи с помощью MERGE INTO.

Как Azure Databricks реализует атомарность?

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

Файлы данных не отслеживаются, если журнал транзакций не записывает новую версию. Если транзакция завершается ошибкой после записи файлов данных в таблицу, эти файлы данных не повреждают состояние таблицы, но файлы не станут частью таблицы. Операция VACUUM удаляет все неуправляемые файлы данных в каталоге таблиц, включая оставшиеся незафиксированные файлы из неудачных транзакций.

Как Azure Databricks реализует устойчивость?

Azure Databricks использует облачное хранилище объектов для хранения всех файлов данных и журналов транзакций. Облачное хранилище объектов имеет высокий уровень доступности и устойчивости. Так как транзакции выполняются успешно или завершаются сбоем, а журнал транзакций находится вместе с файлами данных в облачном хранилище объектов, таблицы в Azure Databricks наследуют гарантии устойчивости облачного хранилища объектов, в котором они хранятся.

Как Azure Databricks реализует согласованность?

В Delta Lake управление оптимистической блокировкой используется для предоставления гарантий транзакций между операциями записи. В этом механизме операции записи выполняются в три этапа:

  1. Чтение: считывает (при необходимости) последнюю доступную версию таблицы для определения, какие файлы необходимо изменить (то есть перезаписать).
    • Записи, которые доступны только для добавления, не считывают текущее состояние таблицы перед записью. Проверка схемы использует метаданные из журнала транзакций.
  2. Запись: записывает файлы данных в каталог, используемый для определения таблицы.
  3. Проверка и фиксация:
    • Проверяет, конфликтуют ли предложенные изменения с любыми другими изменениями, которые могут быть одновременно зафиксированы после считываемого моментального снимка.
    • При отсутствии конфликтов все промежуточные изменения фиксируются в виде новой версии моментального снимка, и операция записи успешно выполняется.
    • При возникновении конфликтов операция записи завершается сбоем с исключением параллельного изменения. Этот сбой предотвращает повреждение данных.

Оптимистическая сцепить предполагает, что большинство параллельных транзакций в данных не могут конфликтуть друг с другом, но могут возникать конфликты. См . сведения о уровнях изоляции и конфликтах записи в Azure Databricks.

Как Azure Databricks реализует изоляцию?

Azure Databricks использует сериализуемую изоляцию по умолчанию для всех операций записи и обновлений таблицы. Изоляция моментальных снимков используется для всех операций чтения таблиц.

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

См . сведения о уровнях изоляции и конфликтах записи в Azure Databricks.

Поддерживает ли Delta Lake транзакции с несколькими таблицами?

Delta Lake не поддерживает транзакции с несколькими таблицами. Delta Lake поддерживает транзакции на уровне таблицы.

Первичный ключ и внешние связи ключей в Azure Databricks являются информационными и не применяются. См. раздел "Объявление первичных ключей" и связей внешнего ключа.

Что означает поддержка операций записи в несколько кластеров для Delta Lake?

Delta Lake предотвращает повреждение данных при одновременном записи нескольких кластеров в одну таблицу. Некоторые операции записи могут конфликтовывать во время одновременного выполнения, но не повреждают таблицу. См . сведения о уровнях изоляции и конфликтах записи в Azure Databricks.

Можно ли изменить таблицу Delta из других рабочих областей?

Да, можно одновременно изменять одну таблицу Delta из разных рабочих областей. Более того, если один процесс выполняет запись из рабочей области, читатели в других рабочих областях увидят согласованное представление.