Введение в механизм хранения базы данных MySQL

MySQL

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

Введение в механизмы хранения

Данные в MySQL хранятся в файлах (или в памяти) с использованием множества различных методов.

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

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

И механизм хранения прямо скажем

  • Как хранить данные
  • Как индексировать сохраненные данные
  • Как обновлять и запрашивать данные и другие технические методы реализации.

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

Введение в классификацию механизма хранения

Ниже приводится краткое введение в механизм хранения MySQL.

InnoDB

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

InnoDB также вводит блокировку на уровне строки и ограничения внешнего ключа, и использование InnoDB идеально подходит в следующих ситуациях:

  • Обновите плотные таблицы. Механизм хранения InnoDB особенно подходит для обработки нескольких одновременных запросов на обновление.

  • дела. Механизм хранения InnoDB является стандартным механизмом хранения MySQL, который поддерживает транзакции.

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

  • Ограничения внешнего ключа. Единственным механизмом хранения, который поддерживает внешние ключи в MySQL, является InnoDB.

  • Поддерживает атрибут автоматического увеличения столбца AUTO_INCREMENT.

  • Механизм хранения innodb стал механизмом хранения по умолчанию, начиная с версии 5.7.

В общем, если требуется поддержка транзакций и существует высокая частота одновременных операций чтения, InnoDB — хороший выбор.

MyISAM

Таблицы MyISAM не зависят от операционной системы, что означает, что их можно легко перенести с сервера Windows на сервер Linux.

Всякий раз, когда мы создаем таблицу для механизма MyISAM, на локальном диске создаются три файла, а имя файла — это имя таблицы.

Например, если я создам таблицу tb_Demo для механизма MyISAM, будут сгенерированы следующие три файла:

  • tb_demo.frm, определение таблицы хранения.
  • tb_demo.MYD, хранить данные.
  • tb_demo.MYI, в котором хранится индекс.

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

  1. Выбирайте интенсивные столы. Механизм хранения MyISAM очень быстр при просеивании больших объемов данных, что является его самым заметным преимуществом.
  2. Таблицы с большим количеством вставок. Функция параллельной вставки MyISAM позволяет одновременно выбирать и вставлять данные.

С этой точки зрения механизм хранения MyISAM очень подходит для управления данными журнала сервера.

MRG_MYISAM

Механизм хранения MRG_MyISAM представляет собой комбинацию набора таблиц MyISAM Старая версия под названием MERGE на самом деле то же самое.

Эти структуры таблиц MyISAM должны быть точно такими же, хотя их использование не так заметно, как в других движках, но в некоторых случаях они могут быть очень полезными.

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

Сценарии использования механизма хранения слияния

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

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

Как использовать механизм хранения Merge

  • ДВИГАТЕЛЬ=ОБЪЕДИНЕНИЕ, Указание на использование движка MERGE на самом деле то же самое, что и MRG_MyISAM, что также правильно, MERGE больше не отображается в MySQL 5.7.

  • ОБЪЕДИНЕНИЕ=(t1, t2), Указывает, какие таблицы присоединены к таблице MERGE.Вы можете изменить значение UNION, изменив таблицу, чтобы реализовать функцию добавления или удаления подтаблиц таблицы MERGE. Например:

alter table tb_merge engine=merge union(tb_log1) insert_method=last;
  • INSERT_METHOD=ПОСЛЕДНИЙ, INSERT_METHOD указывает метод вставки, и значение может быть:0Вставка не допускается;FIRSTВставить в первую таблицу в UNION;LASTПоследняя таблица для вставки в UNION.

  • Таблица MERGE и таблицы данных элементов, составляющие структуру таблицы данных MERGE, должны иметь точно такую ​​же структуру. Столбцы данных каждой таблицы данных-членов должны быть определены в одном и том же порядке с одним и тем же именем и типом, а индексы должны быть определены в том же порядке и одним и тем же способом.

MEMORY

Отправной точкой использования механизма хранения MySQL Memory является скорость.Чтобы получить самое быстрое время отклика, используемым логическим носителем данных является системная память.

Хотя хранение табличных данных в памяти обеспечивает высокую производительность, при сбое демона mysqld все данные в памяти теряются.

Увеличение скорости также имеет некоторые недостатки.

Для этого требуется, чтобы данные, хранящиеся в таблице данных памяти, использовали формат постоянной длины, что означает, что нельзя использовать типы данных переменной длины, такие как BLOB и TEXT. VARCHAR — это тип переменной длины, но его можно использовать, поскольку внутри MySQL он обрабатывается как тип CHAR фиксированной длины.

Механизм хранения памяти обычно используется в следующих ситуациях:

  • Целевые данные невелики и используются очень часто. Хранение данных в памяти вызовет использование памяти.Вы можете контролировать размер таблицы памяти с помощью параметра max_heap_table_size.Установив этот параметр, вы можете ограничить максимальный размер таблицы памяти.
  • Если данные временные и должны быть доступны немедленно, их можно сохранить в таблице в памяти.
  • Данные памяти хранятся в таблице, если внезапно проиграли, она не отрицательно не влияет на вещество службы приложений.
  • Память поддерживает как хеш-индексы, так и индексы B-дерева.

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

Хэш-индексы очень быстры для «сравнений на равенство», но намного медленнее для «сравнений диапазонов», поэтому значения хеш-индексов подходят для использования в операторах = и , но не в операторах , также не подходит для использовать в порядке по пункту.

CSV

Механизм хранения CSV хранит данные на основе файлов формата CSV.

  • Из-за собственного формата файла механизма хранения CSV во всех столбцах должно быть обязательно указано значение NOT NULL .
  • Движок CSV также не поддерживает ни индексы, ни секционирование.
  • Механизм хранения CSV также будет включать файл .frm для хранения структуры таблицы, файл .csv для хранения данных и файл метаинформации с тем же именем.Статус и объем данных, хранящихся в таблице.
  • Каждая строка данных занимает одну текстовую строку.

Поскольку сам файл csv может быть отредактирован непосредственно программным обеспечением, таким как Office, возникает ситуация, когда карты не разыгрываются по правилам, если техническое обслуживание не завершено.Если содержимое в файле csv повреждено, вы также можете использовать команду CHECK TABLE или REPAIR TABLE для проверки и исправления

ARCHIVE

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

До MySQL версии 5.5 Archive не поддерживал индексы, но после MySQL 5.5 он начал их поддерживать.

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

BLACKHOLE

MySQL предоставляет движок Blackhole в серии 5.x — «черная дыра», что соответствует его названию: любые данные, записанные в этот движок, будут отброшены без фактического сохранения; содержимое оператора Select всегда пусто.

Это так же, как в Linux/dev/nullЗавершение файла работает точно так же.

Итак, какая польза от движка, который не может хранить данные?

Хотя Blackhole не хранит данные, MySQL по-прежнему будет нормально записывать бинлоги, и эти бинлоги также будут нормально синхронизированы с ведомым устройством, и впоследствии данные могут быть обработаны на ведомом устройстве.

Таким образом, блокировка полезна, когда на Мастере требуется только Binlog, а данные не требуются.

BlackHole также можно использовать в следующих сценариях.

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

PERFORMANCE_SCHEMA

В основном используется для сбора параметров производительности сервера базы данных.

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

Вот несколько официальных представлений:MySQL Performance Schema

FEDERATED

Он в основном используется для доступа к другим удаленным серверам MySQL в качестве прокси, который создает клиентское соединение с удаленным сервером MySQL, передает запрос на удаленный сервер для выполнения, а затем завершает доступ к данным; реализация на MariaDB — FederatedX.

разное

Вот некоторые механизмы хранения, предоставляемые другими базами данных, OQGraph, SphinxSE, TokuDB, Cassandra, CONNECT, SQUENCE.

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

Общее сравнение двигателей

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

характеристика InnoDB MyISAM MEMORY ARCHIVE
Ограничения хранения 64TB No YES No
Транзакции Yes No No No
Детализация блокировки блокировка строки блокировка стола блокировка стола блокировка строки
Индексы B-дерева Yes Yes Yes No
Индексы T-дерева No No No No
Хэш-индексы Yes No Yes No
Полнотекстовые указатели Yes Yes No No
Кластерные индексы Yes No No No
Кэши данных Yes No N/A No
Кэши индексов Yes Yes N/A No
Сжатые данные Yes Yes No Yes
Зашифрованные данные[1]) Yes Yes Yes Yes
Поддержка кластерных баз данных No No No No
Поддержка репликации[2]) Yes No No Yes
Поддержка внешнего ключа Yes No No No
Стоимость хранения высокий Низкий N/A очень низко
Стоимость памяти высокий Низкий N/A Низкий
Обновление статистики для словаря данных Yes Yes Yes Yes
резервное копирование/восстановление на момент времени[3]) Yes Yes Yes Yes
Многоверсионный контроль параллелизма/MVCC Yes No No No
Эффективность массовой записи данных (скорость массовой вставки) медленный быстрый быстрый очень быстро
Поддержка геопространственных типов данных Yes Yes No Yes
Поддержка геопространственного индексирования[4]) Yes Yes No Yes

Команды операций, связанные с подсистемой хранения

Просмотр механизмов хранения

Используйте команду "SHOW VARIABLES LIKE '%storage_engine%';" для поиска механизма хранения по умолчанию в системной переменной mysql. Оператор ввода выглядит следующим образом:

mysql> SHOW VARIABLES LIKE '%storage_engine%';
+----------------------------------+---------+
| Variable_name                    | Value   |
|----------------------------------+---------|
| default_storage_engine           | InnoDB  |
| default_tmp_storage_engine       | InnoDB  |
| disabled_storage_engines         |         |
| internal_tmp_disk_storage_engine | InnoDB  |
+----------------------------------+---------+
4 rows in set
Time: 0.005s

использоватьSHOW ENGINES;Команда отображает все поддерживаемые механизмы хранения и механизмы по умолчанию, доступные после установки, а затем\GВы можете перечислить результаты вывода, вы можете попробоватьSHOW ENGINES\G;.

mysql> SHOW ENGINES;
+--------------------+---------+--------------------------------------+-------------+--------+-----------+
| Engine             | Support | Comment                              | Transactions| XA     | Savepoints|
|--------------------+---------+--------------------------------------+-------------+--------+-----------|
| InnoDB             | DEFAULT | Supports transactions,               | YES         | YES    | YES       |
|                    |         | row-level locking, and foreign keys  |             |        |           |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables| NO          | NO     | NO        |
| MEMORY             | YES     | Hash based, stored in memory, useful | NO          | NO     | NO        |
|                    |         | for temporary tables                 |             |        |           |
| BLACKHOLE          | YES     | /dev/null storage engine (anything   | NO          | NO     | NO        |
|                    |         | you write to it disappears)          |             |        |           |
| MyISAM             | YES     | MyISAM storage engine                | NO          | NO     | NO        |
| CSV                | YES     | CSV storage engine                   | NO          | NO     | NO        |
| ARCHIVE            | YES     | Archive storage engine               | NO          | NO     | NO        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                   | NO          | NO     | NO        |
| FEDERATED          | NO      | Federated MySQL storage engine       | <null>      | <null> | <null>    |
+--------------------+---------+--------------------------------------+-------------+--------+-----------+

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

Настроить механизм хранения

Поняв описанный выше механизм хранения базы данных, вы можетеmy.cnfУстановите нужный механизм хранения в файле конфигурации.Этот параметр помещается в значение параметра default_storage_engine в поле [mysqld], например, в следующем фрагменте конфигурации

[mysqld]
default_storage_engine=CSV

При создании таблицы установите механизм хранения для таблицы

Например:

CREATE TABLE `user` (
  `id`     int(100) unsigned NOT NULL AUTO_INCREMENT,
  `name`   varchar(32) NOT NULL DEFAULT '' COMMENT '姓名',
  `mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '手机',
  PRIMARY KEY (`id`)
)ENGINE=InnoDB;

При создании пользовательской таблицы user последний ENGINE=InnoDB в операторе SQL должен установить механизм хранения этой таблицы в InnoDB.

Как выбрать правильный механизм хранения

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

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

Использование подходящего механизма хранения повысит производительность всей базы данных.

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

  1. Требуются ли поддерживающие транзакции;
  2. Использовать ли горячее резервное копирование;
  3. Восстановление после сбоя, можно ли принять сбой;
  4. Требуется ли поддержка внешнего ключа;
  5. ограничения хранения;
  6. Поддержка индексации и кэширования.