Aria Storage Engine

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 14:38, 23 декабря 2017.


Aria
Создатели: AskMonty.org
Разработчики: Monty Program Ab
Постоянный выпуск: MariaDB 10.0.12 / 16 June 2014 года; 7 years ago (2014-06-16)
Платформа: Все
Локализация: C++
Тип ПО: Движок БД
Лицензия: GNU GPLv2
Веб-сайт kb.askmonty.org/v/aria

Aria - это подсистема хранения для реляционных СУБД MariaDB и MySQL. Её цель сделать альтернативу MyISAM с защитой от сбоев. Она является нетранзакционной, но планируется добавить надлежащую поддержку транзакций базы данных в будущем. Долгосрочная цель заключается в том, чтобы Aria являлась транзакционной и нетранзакционной подсистемой хранения данных для MariaDB по умолчанию. Она находится в разработке с 2007 года и впервые была анонсирована Майклом Видениусом в его блоге. Ария используется для внутренних временных таблиц в MariaDB, разработанной сообществом ответвлением базы данных MySQL, возглавляемой Видениусом. Ария не поставлена с MySQL или Percona Server, но включена в TokuDB - релиз MariaDB.

Проект Maria размещен на Launchpad.

Aria первоначально была названа "Maria" в честь младшей дочери Монти.[Источник 1] Проект был переименован в Aria в 2010, чтобы избежать путанницы с MariaDB - главной БД для которой проект разрабатывался.[Источник 2]

Возможности

Aria очень похожа на MyISAM, но ее цель состоит в том, чтобы быть безопасной от сбоев альтернативой MyISAM.

Aria не поддерживает первичные ключи и транзакции на данный момент.

Aria поддерживает:

  • Полнотекстовый индекс;
  • Типы данных OpenGIS;
  • Виртуальные столбцы.

Новые опции[Источник 3]

Есть также некоторые новые опции CREATE TABLE:

TRANSACTONAL = 0 | 1: Не установлено по умолчанию, если установлено в 1, таблицы будут транзакционными, означая, что все изменения регистрируются в журнале транзакций и синхронизируются в конце операции. Это незначительно замедлит записи и обновления, но делает таблицу отказоустойчивой, так, чтобы, если сервер перестает работать в процессе операции, все изменения откатывались к состоянию перед выполнением операции. Для этого нужно на 6 байт больше для каждой строки и ключ, чтобы сохранить id транзакции (чтобы позволить параллельную вставку и выбор). TRANSACTIONAL=1 не поддерживается для разделенных таблиц.

PAGE_CHECKSUM = 0 | 1: Если индекс и данные должны использовать контрольные суммы страницы для дополнительной безопасности.

TABLE_CHECKSUM = 0 | 1: то же, что и CHECKSUM в MySQL 5.1

ROW_FORMAT=PAGE: формат строки по умолчанию для таблиц данных Aria и единственный формат строки, который может использоваться если TRANSACTIONAL=1. Чтобы эмулировать MyISAM, используйте ROW_FORMAT=FIXED или ROW_FORMAT=DYNAMIC Формат строки по умолчанию - PAGE и PAGE по умолчанию означает транзакционность. Опции TRANSACTIONAL и ROW_FORMAT взаимодействуют следующим образом:

Если TRANSACTIONAL=1, форматом строки будет PAGE. Если пользователь определил некоторый другой формат строки, Aria посылает предупреждение и вынуждает формат строки сделать PAGE.

Если TRANSACTIONAL=0, таблица будет не транзакционной, и формат строки будет тем, что пользователь определил (или PAGE, по умолчанию).

Если TRANSACTIONAL не был определен вообще, формат строки будет тем, что пользователь определил (или PAGE, по умолчанию), и таблица будет транзакционной, если формат строки PAGE и нетранзакционной иначе.

CHECKSUM TABLE теперь игнорирует значения в полях NULL. Это делает CHECKSUM TABLE быстрее и исправленет некоторые случаи, где то же табличное определение могло дать различные значения контрольной суммы в зависимости от формата строки. Недостаток - то, что значение теперь отличается по сравнению с другими установками MySQL. Новое вычисление контрольной суммы фиксировано для всех табличных механизмов, которые используют способ вычисления по умолчанию и MyISAM, который делает вычисление внутренне.

Примечание: таблицы Old MyISAM с внутренней контрольной суммой возвратят ту же контрольную сумму как прежде. Чтобы фиксировать их, чтобы вычислить согласно новым правилам, Вы должны сделать ALTER TABLE. Вы можете использовать старые способы вычислить контрольные суммы при помощи опции --old в mysqld или установить системную переменную '@@old' в 1, когда Вы делаете CHECKSUM TABLE ... EXTENDED;

При запуске Aria проверит журналы Aria и автоматически восстановит таблицы с последней контрольной точки, если mysqld завершил работу некорректно.

Опции запуска mysqld для Aria[Источник 4]

В нормальном функционировании единственные переменные, которые Вы должны рассмотреть:

aria-pagecache-buffer-size Место, где все индексные страницы и страницы данных кэшируются. Чем оно больше, тем быстрее Aria будет работать.

aria-block-size Значение по умолчанию 8192, должно хорошо подходить для большинства случаев. Единственная проблема с более высоким значением состоит в том, что занимает больше времени найти упакованный ключ в блоке, поскольку нужно искать примерно 4096 (то есть половину), чтобы найти каждый ключ. Планируется фиксировать это, добавляя словарь в конце страницы, чтобы сделать двоичный поиск в блоке прежде, чем запустить сканирование. Пока это не сделано, и ключевые поиски также занимают много времени, даже если Вы не поражаете диск, Вам следует сделать размер меньшим. Возможными значениями являются 2048, 4096 или 8192. Обратите внимание на то, что Вы не можете изменить это без дампа, удаления старых таблиц и удаления всех файлов журнала и затем восстановления Ваших таблиц Aria. (Это единственная опция, которая требует дампа и загрузки),

aria-log-purge-type Установите "at_flush", если Вы хотите сохранить копию журналов транзакций (хорошо подходит как дополнительное резервное копирование). Регистрации сохранятся до тех пор, пока Вы не выполните FLUSH LOGS;

Структура файлов

Таблицы Aria состоят из трех файлов:

  • table_name.frm
  • table_name.MAD
  • table_name.MAI

.frm содержит определение таблицы (этот файл существует для всех подсистем хранения, которые записывают данные на диск). .MAD файл содержит данные. .MAI файл содержит индексы.

Форматы[Источник 5]

3 табличных формата доступно для таблиц в Aria:

  • PAGE;

Формат страницы по умолчанию для таблиц Aria и является единственным форматом, который может использоваться, если TRANSACTIONAL=1.

Характеристики:

  • Таблицы кэшируется кэшем страницы, который дает лучшую случайную производительность, поскольку использует меньше системных вызовов.
  • Не фрагментируется так же легко легко как DYNAMIC формат во время UPDATE. Максимальное количество фрагментов очень низкое.
  • Обновления более быстро, чем динамические таблицы.
  • Обладает небольшим объемом памяти, главным образом заметно на очень маленьких строках
  • Медленнее выполняет полное сканирование таблицы
  • Медленнее, если есть многократно сделанные дубликаты ключа, поскольку Aria сначала запишет строку, потом ключи, и только затем проверит на дубликаты.


  • FIXED;

Таблицы фиксированная длины (статичной) содержат записи фиксированной длины. Все столбцы одной длина для всех записей, независимо от фактического содержания. Это - формат по умолчанию, если у таблицы нет полей BLOB, ТЕХТ, VARCHAR или VARBINARY, и никакой формат строки не выбран. Вы можете также определить фиксированную таблицу с ROW_FORMAT=FIXED в табличном определении.

Таблицы, содержащие BLOB или TEXT поля, не могут быть FIXED, так как являются динамическими полями.

Характеристики:

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


  • DYNAMIC.

Динамические таблицы содержат данные переменной длины. Является форматом по умолчанию, если у таблицы есть поля BLOB, TEXT, VARCHAR или VARBINARY, и никакой формат строки не выбран. Вы можете также определить динамическую таблицу с ROW_FORMAT=DYNAMIC в определении таблицы.

Характеристики:

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


PAGE единственный формат доступный для транзакционных таблиц.

FIXED и DYNAMIC те же самые форматы, что используются в MyISAM, и были реализованы, главным образом, для совместимсти. Однако формат MyISAM COMPRESSED не доступен в Aria.

Чтобы установить формат таблицы, можно использовать опцию ROW_FORMAT в командах CREATE TABLE или ALTER TABLE.

Смотри также

Источники

  1. Why is the engine called Aria // AskMonty KnowledgeBase.[2017–2017]. Дата обновления: 02.12.2017. URL: http://kb.askmonty.org/v/aria-faq#why-is-the-engine-called-aria (дата обращения: 02.12.2017)
  2. Rename Maria // AskMonty.[2017–2017]. Дата обновления: 02.12.2017. URL: https://web.archive.org/web/20100503155953/http://askmonty.org/wiki/Rename_Maria (дата обращения: 02.12.2017)
  3. Aria storage engine // Maria database.[2017–2017]. Дата обновления: 02.12.2017. URL: https://mariadb.com/kb/en/library/aria-storage-engine/ (дата обращения: 02.12.2017)
  4. Aria storage engine // Maria database.[2017–2017]. Дата обновления: 02.12.2017. URL: https://mariadb.com/kb/en/library/aria-storage-engine/ (дата обращения: 02.12.2017)
  5. Aria storage formats // Maria database.[2017–2017]. Дата обновления: 02.12.2017. URL: https://mariadb.com/kb/en/library/aria-storage-formats/ (дата обращения: 02.12.2017)

Внешние ссылки