понедельник, 18 марта 2019 г.

MiniM. О применении блочного экспорта

В MiniM Database Server реализован блочный экспорт и импорт глобалов. Эта статья рассматривает его применение в практических задачах.

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

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

Блоки длинных строк позволяют хранить до 32 килобайт в одном значении в то время как размер одного блока только 8 килобайт. В случае если значением глобального имени является длинная строка то в листовом блоке хранится не значение, а ссылка на цепочку блоков для длинной строки.

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

Для блочного экспорта MiniM Database Server использует только листовые блоки и блоки длинных строк. Этой информации достаточно для полного импорта данных на логическом уровне. При последующем импорте MiniM Database Server читает имя глобала из листового блока, значения ключей и значение данных или блоки длинных строк и вставляет эти данные в базу данных.

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

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

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

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

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

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

Применяемый в MiniM Database Server формат блочного экспорта глобалов не совпадает с форматами блочного экспорта глобалов других реализаций MUMPS и не может быть использован для переноса данных на другие сервера кроме MiniM.

Комментариев нет:

Отправить комментарий