Использование булевой логики для защиты данных
В мире баз данных вопросы защиты информации имеют исключительно важное значение. Существуют различные аспекты защиты информации (см. главу 12), среди которых — авторизация доступа, исключение запрещенных манипуляций информацией и т. д. В настоящей врезке вкратце затронуты вопросы повреждения данных.
Иногда случаются аппаратные сбои, в результате которых повреждаются данные — в триллионах нулей и единиц, представляющих данные на диске, происходят смещения или вообще обнуления. В результате информация искажается или вообще исчезает. Это может стать результатом скачков напряжения, проникновения космических лучей, землетрясений и т. п. В данной ситуации возникает задача восстановления данных в согласованное состояние. Одной из применяемых технологий является использование массивов независимых дисков (RAID-масивов), работающих как единое целое. Они повышают надежность и скорость операций. Существует несколько типов архитектуры RAID, от RAID0 до RAID5 (RAID0 — это еще один термин, обозначающий один диск). Несмотря на то что RAID-массивы не имеют прямого отношения к SQL, они важны для понимания работы СУБД и булевой алгебры. RAID-массивы связывает с булевой логикой заложенная в них фундаментальная технология, называемая Полосованием. Разделы устройств в RAID-массиве связываются в полосы, образующие последовательности.
Представьте себе вафельный торт, в котором первая, третья и пятая вафли смазаны маслом, а вторая и четвертая — джемом. Аналогично этому, RAID-массив позволяет выполнять разные операции с данными, распределенными одновременно по нескольким дискам (устройствам), значительно ускоряя операции чтения и записи. В конфигурациях RAID3, RAID4 и RAID5 еще одним элементом защиты данных является проверка четности — одно из устройств выделяется для хранения информации о четности. Если одно из устройств массива выходит из строя, вся информация, хранимая в массиве, может быть восстановлена с помощью булевой операции XOR, выполняемой с данными, хранимыми на остальных дисках. Рассмотрим представленный ранее пример, однако на этот раз применим оператор xor вместо and. Результаты применения этого оператора следующие: 0 xor 0 = 0, 0 xor 1 = 1,