stringtranslate.com

Согласованность данных

Несогласованность данных означает, что одни и те же данные, хранящиеся в разных местах, совпадают или нет.

Последовательность на определенный момент времени

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

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

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

Контрпример

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

Предположим, что база данных Википедии — это огромный файл, в котором важный индекс находится на 20% пути, и сохраняет данные статьи на отметке 75%. Рассмотрим сценарий, в котором редактор приходит и создает новую статью, в то же время выполняется резервное копирование, которое делается как простая « копия файла », которая копирует от начала до конца большой файл(ы) и не учитывает согласованность данных — и на момент редактирования статьи она завершена на 50%. Новая статья добавляется в пространство статьи (на отметке 75%), и добавляется соответствующая запись индекса (на отметке 20%).

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

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

Процесс резервного копирования, который должным образом учитывает согласованность данных, гарантирует, что резервная копия является моментальным снимком того, как выглядела вся база данных в определенный момент. В приведенном примере Википедии это гарантирует, что резервная копия была записана без добавленной статьи на отметке 75%, так что данные статьи будут соответствовать ранее записанным данным индекса.

Системы кэширования дисков

Согласованность на определенный момент времени также актуальна для дисковых подсистем компьютера.

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

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

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

Например, чтобы сохранить типичный файл документа или изображения, операционная система может записать на диск следующие записи в следующем порядке:

  1. Запись в журнале о том, что файл XYZ будет сохранен в секторе 123.
  2. Фактическое содержимое файла XYZ записывается в сектор 123.
  3. Сектор 123 теперь отмечен как занятый в отчете о свободном/используемом пространстве.
  4. Запись в журнале, в которой указано, что файл полностью сохранен, его имя XYZ, и он расположен в секторе 123.

Операционная система полагается на предположение, что если она видит, что элемент № 1 присутствует (что говорит о том, что файл будет сохранен), но элемент № 4 отсутствует (подтверждает успех), то операция сохранения была неудачной, и поэтому она должна отменить все незавершенные шаги, уже предпринятые для ее сохранения (например, пометить сектор 123 как свободный, поскольку он никогда не был заполнен должным образом, и удалить любую запись XYZ из файлового каталога). Она полагается на то, что эти элементы будут зафиксированы на диске в последовательном порядке.

Предположим, что алгоритм кэширования определяет, что быстрее всего будет записать эти элементы на диск в порядке 4-3-1-2, и начинает это делать, но питание отключается после записи 4, перед 3, 1 и 2, и поэтому эти записи никогда не происходят. Когда компьютер снова включается, файловая система затем показывает, что он содержит файл с именем XYZ, который находится в секторе 123, но этот сектор на самом деле не содержит файл. (Вместо этого сектор будет содержать мусор, или нули, или случайную часть какого-то старого файла - и это то, что будет показано, если файл открыт).

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

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

Высокопроизводительные аппаратные контроллеры дисков, которые используются в серверах, включают в себя небольшой резервный аккумулятор в своей кэш-памяти, чтобы они могли предложить прирост производительности кэширования записи, одновременно снижая риск непреднамеренных отключений. Резервный аккумулятор поддерживает питание памяти даже во время выключения, чтобы при повторном включении компьютера он мог быстро завершить любые ранее выполненные записи. С таким контроллером операционная система может запросить четыре записи (1-2-3-4) в указанном порядке, но контроллер может решить, что самый быстрый способ их записать — 4-3-1-2. Контроллер по сути лжет операционной системе и сообщает, что записи были завершены в указанном порядке (ложь, которая повышает производительность за счет повреждения данных в случае отключения питания), а резервный аккумулятор защищает от риска повреждения данных, предоставляя контроллеру возможность молча исправить любые и все повреждения, которые могут возникнуть в результате.

Если питание отключается после записи элемента 4, резервная память с батарейным питанием сохраняет запись обязательств по остальным трем элементам и обеспечивает их запись («сброс») на диск при первой же возможности.

Последовательность транзакций

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

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

Согласованность транзакций гарантирует именно это: система запрограммирована на обнаружение незавершенных транзакций при включении и отмену (или «откат») части любых обнаруженных незавершенных транзакций.

Последовательность применения

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