MySQL: специфические движки для хранения таблиц

Специализированные системы хранения таблиц в СУБД MySQLMySQL предоставляет множество специализированных подсистем хранения. По разным причинам большинство из них несколько устарели для новых версий. Некоторые же по-прежнему доступны на сервере, но требуют специальной активации.

 


Оглавление статьи[Показать]


Archive

Подсистема хранения Archive позволяет выполнять только команды INSERT и SELECT, к тому же до версии MySQL 5.1 она не поддерживала индексирование. Archive требу­ет значительно меньше операций дискового ввода/вывода, чем MyISAM, поскольку буферизует записываемые данные и сжимает все вставляемые строки с помощью би­блиотеки zlib. Кроме того, каждый запрос SELECT требует полного просмотра таблицы. Таблицы Archive идеальны для ведения журнала и сбора данных, когда анализ чаще всего сводится к просмотру всей таблицы или когда требуется обеспечить быстроту выполнения запросов INSERT.

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

 

Blackhole

В подсистеме Blackhole механизма хранения данных вообще нет. Она игнорирует коман­ды INSERT, а не хранит их. Однако сервер записывает запросы к таблицам Blackhole в журналы как обычно, поэтому их можно реплицировать на подчиненные серверы или просто сохранить в журнале. Это делает подсистему Blackhole полезной для настройки предполагаемых репликаций и ведения журнала аудита, но мы видели много проблем, вызванных такими настройками, и не рекомендуем применять этот способ.

 

CSV

Подсистема хранения CSV может обрабатывать файлы с разделителями запятыми (comma-separated values, CSV) как таблицы, но не поддерживает индексы по ним. Эта подсистема позволяет импортировать и экспортировать данные во время работы сервера. Если вы экспортируете CSV-файл из электронной таблицы и сохраните в каталоге данных сервера MySQL, то сервер сможет сразу его прочитать. Анало­гично, если вы записываете данные в таблицу CSV, внешняя программа сможет сразу же ее прочесть. Таким образом, таблицы CSV полезны в качестве формата обмена данными.

 

Federated

Эта подсистема хранения является своего рода прокси-сервером для других серверов. Она открывает клиентское соединение с другим сервером и выполняет там запро­сы к таблице, получая и отправляя строки по мере необходимости. Первоначально она продавалась в качестве конкурента для функций, поддерживаемых многими частными серверами баз данных корпоративного уровня, такими как Microsoft SQL Server и Oracle, но это было, мягко говоря, притянуто за уши. Подсистема хранения Federated выглядит способной обеспечивать высокую степень гибкости, однако она является источником многих проблем и по умолчанию отключена. Ее преемница FederatedX доступна в MariaDB.

 

Memory

Таблицы типа Memory (раньше называвшиеся таблицами типа HEAP) удобно ис­пользовать, когда необходимо получить быстрый доступ к данным, которые либо никогда не изменяются, либо не должны сохраняться после перезапуска сервера. Таблицы типа Memory обрабатываются на порядок быстрее, чем таблицы MyISAM. Все содержащиеся в них данные хранятся в памяти, поэтому запросам не нужно ждать выполнения операций дискового ввода/вывода. Структура таблицы Memory сохраняется после перезагрузки сервера, но данные теряются.

Вот несколько способов применения таблиц типа Memory:

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

Таблицы Memory поддерживают HASH-индексы, которые обеспечивают очень высо­кую скорость выполнения поисковых запросов. Эти таблицы работают очень быстро, но не всегда подходят для замены дисковых таблиц. Они используют табличную блокировку, что уменьшает конкуренцию при записи. Они не поддерживают столбцы типа TEXT и BLOB и допускают использование только строк фиксированной длины, поэтому значения типа VARCHAR сохраняются как значения типа CHAR, что увеличивает расход памяти. (Некоторые из этих ограничений сняты в Percona Server.)

MySQL использует подсистему Memory для внутреннего хранения промежуточных результатов при обработке запросов, которым требуется временная таблица. Если промежуточный результат становится слишком большим для таблицы Memory или содержит столбцы типа TEXT или BLOB, то MySQL преобразует его в таблицу MyISAM на диске. 

Многие путают таблицы типа Memory с временными таблицами, которые создаются командой CREATE TEMPORARY TABLE. Временные таблицы могут
использовать любую подсистему хранения. Это не то же самое, что таблицы типа Memory. Временные таблицы видны только в одном соединении и исчезают, когда оно закрывается.

 

Merge

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

 

NDB Cluster

MySQL АВ приобрела базу данных NDB у Sony Ericsson в 2003 году и создала под­систему хранения NDB Cluster в качестве интерфейса между SQL, используемым в MySQL, и собственным протоколом NDB. Комбинация сервера MySQL, подси­стемы хранения NDB Cluster и распределенной, не поддерживающей разделения ресурсов, устойчивой к сбоям широкодоступной базы данных NDB называется MySQL Cluster. Мы еще обсудим MySQL Cluster позже.

 

Вас заинтересует / Intresting for you:

Модель развития базы данных My...
Модель развития базы данных My... 1409 просмотров Ирина Светлова Thu, 10 Jan 2019, 12:29:03
MySQL: подсистемы хранения сто...
MySQL: подсистемы хранения сто... 1347 просмотров Ирина Светлова Sat, 07 Aug 2021, 10:28:39
Подсистемы (движки) хранения в...
Подсистемы (движки) хранения в... 4588 просмотров Дэйзи ак-Макарова Wed, 04 Aug 2021, 18:11:43
Подсистемы хранения в MySQL
Подсистемы хранения в MySQL 2890 просмотров Ирина Светлова Sat, 07 Aug 2021, 10:44:17
Войдите чтобы комментировать