InnoDB

Материал из Энциклопедия о программировании
Перейти к: навигация, поиск

InnoDB — движок табл. БД; одна из выбираемых подсистем низк. ур. в СУБД MySQL, входит во все стандарт. сборки для различн. ОС.

Отличия

Основным отличием InnoDB от др. подсистем низк. ур. MySQL явл. наличие механизма транзакций и внешних ключей.

История создания и развития

InnoDB была разработана Хейкки Туури (фин. Heikki Tuuri) из компании Innobase — финского производителя ПО, специализирующегося на технологии реляционных БД. InnoDB представляет собой результат исследований, проводимых Хейкки в университете Хельсинки. После поглощения Innobase в 2005 г., InnoDB стала продуктом Sun Microsystems, впоследствии поглощённой Oracle Corporation. Поддержка InnoDB появилась в MySQL вер. 3.23, а начиная с вер. 5.5 стал основным хранилищем по-умолч. Сама СУБД доступна на условиях открытой лицензии.

Особенности механизма хранения данных

В отлич. от MyISAM, где для каждой табл. создается 1 файл данных, данные InnoDB, в настройках по-умолч., хранятся в больших, совместно используемых, файлах (изменить это можно с помощью настроек опции innodb_file_per_table), что позволяет использовать постраничный кэш стр. БД. Формат данных InnoDB обеспечивает надежное хранение данных за счёт транзакционности и блокировки данных на ур. строки.

InnoDB vs MyISAM

Гипотетически InnoDB более профессиональный, чем MyISAM, ибо поддерживает все возможности полноценного сервера БД – в отлич. от MyISAM, он не "бьётся" (его не надо периодически "чинить") и теоретически позволяет хранить и эффективно обрабатывать наибольшие массивы инфо, чем MyISAM. Всё это даёт право называться ему движком табл. корпоративного ур.

  • На вставках MyISAM обычно быстрее InnoDB
  • На выборках InnoDB быстрее MyISAM

Основные моменты

  • Поддержка транзакций
  • Поддержка внешних ключей
  • Поддержка всех видов ограничений
  • Поддержка полнотекстового поиска
  • Постоянная журналируемость. Движок постоянно работает в режиме транзакционности, т.е. каждая операция сначала пишется в журнал и после подтверждения изменения применяются. Из-за такого подхода при обработке больших объёмов данных (при вставке и обновлении) могут возникать задержки.
  • Все данные всех табл. сервера БД хранятся в больших физ. смешанных файлах, расположенных вне директории БД, в корне каталога с директориями БД, и называются ibdata1. Они характерны большим размером. В самой директории БД хранятся файлы, описывающие лишь структуру табл. Поэтому полный перенос БД невозможен лишь с помощью копирования директории БД, т.к. данные находятся вне директории в смешанных файлах. Копировать эти большие файлы так же непрактично, т.к. там хранятся все данные всех табл. сервера БД, и поэтому отделять данные одной БД от данных др. можно только, имея полную структуру всех табл. сервера БД. Т.е. копировать надо все директории БД, чтобы на основании всех файлов, описывающих структуру табл., можно было отделить данные каждой табл. Изменить такое поведение движка можно с помощью опции innodb_file_per_table.
  • Все операции журналируются. Журналы хранятся в корне каталога с директориями БД, и называются так: ib_logfile0 и ib_logfile1. Размер журналов можно так же задать, по-умолч. = 50 мб.
  • Начиная с вер. MySQL 5.6.4, в InnoDB доступен полнотекстовый поиск основанный на полнотекстовом индексе.
  • Высок. скорость работы, особенно на запросах SELECT.

Движок таблиц InnoDB поддерживает все возможности сервера БД MySQL, поэтому рекомендуется для использ. по-умолч.

Обслуживание

Восстановление табл. InnoDB делается след. обр.[1]:

mysqld --innodb_force_recovery=1
  1. http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html