Движки для базы данных MySQL - InnoDB, MyISAM и Archive

16 Декабря 2022 (ред)

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

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

Archive — хранит данные в виде ZIP архива. Для данного движка размер таблицы будет очень мал. Однако, из этого следует, что изменение данных будет очень медленным. Выборка же данных производится примерно как у движка MyISAM. У этого движка нет ограничения Primary Key, транзакций и прочего. Основное предназначение данного движка для данных, которые никогда или очень редко меняются. Например, справочники.

MyISAM vs. InnoDB

  1. Система хранения данных: MyISAM использует таблицы с фиксированной длиной строк, в то время как InnoDB использует таблицы с переменной длиной строк. Это означает, что MyISAM обычно быстрее при выполнении операций чтения, а InnoDB более эффективен при выполнении операций записи.

  2. Транзакции и целостность данных: InnoDB поддерживает ACID-транзакции (Atomicity, Consistency, Isolation, Durability - Атомарность, Согласованность, Изолированность, Устойчивость). Это означает, что в случае сбоя данных, InnoDB может откатить все изменения, сохраняя целостность данных. MyISAM не поддерживает транзакции и не обеспечивает такой же уровень целостности данных.

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

  4. Внешние ключи: InnoDB поддерживает внешние ключи (foreign keys), что облегчает поддержку связей между таблицами и обеспечивает целостность данных. MyISAM не поддерживает внешние ключи.

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

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

3 Ответа

  1. Evg Evg 16 Декабря 2022

    Мне показалось, что InnoDB имеет более высокую надежность хранения? Сайт есть, там трафик большой, как перевел на InnoDB всё нормальнос стало, а раньше летело почему-то.

  1. fomiash fomiash 16 Декабря 2022

    Да, InnoDB лучше, когда нужна высокая надежность хранения и быстрое восстановление после сбоя. Плюс движок этот хорошо справляется со смешанными типами запросов, когда одновременно и чтение и редактирование и удаление происходит. Минусы InnoDB - могут возникать deadlock'и, не свойственные MyISAM. В основном из-за большей функциональности, например транзакций. Но вообще, этот движок не зря стоит по умолчанию.

  1. fomiash fomiash 11 Ноября 2024 (ред.)

    MyRocks, движок хранения к СУБД MySQL от Facebook

    Facebook запустил проект MyRocks, который включает новый движок хранения для системы управления базами данных MySQL 5.6. Он основан на RocksDB и оптимизирован для использования с Flash-накопителями. Основными задачами MyRocks являются улучшение эффективности хранения данных на Flash-носителях и уменьшение объема базы данных.

    В InnoDB основными факторами, способствующими большому потреблению дискового пространства, являются фрагментация, низкая степень сжатия и фиксированный размер страниц для хранения данных (8 КБ). Даже если данные занимают 5 КБ, блок размером 8 КБ все равно будет расходоваться. В отличие от этого, MyRocks использует плавающий размер страниц и предлагает более эффективный метод сжатия. Кроме того, MyRocks требует меньше операций последовательного чтения и записи благодаря модели хранения данных на основе логов (Log Structured Merge Trees), которая допускает только добавление данных, а очистка выполняется сборщиком мусора.

    Внедрение нового хранилища на основных серверах Facebook для хранения аналогичного объема данных позволило сократить размер базы данных на 50% по сравнению с сжатым хранилищем InnoDB и в 3,5 раза по сравнению с InnoDB без сжатия. Также использование MyRocks привело к ускорению процесса репликации за счет снижения количества операций чтения при обновлении ключей. Операции загрузки данных в базу тоже стали быстрее благодаря пакетной обработке.

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

    Репозиторий: https://github.com/facebook/mysql-5.6



Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.