Правда ли, что движок MyISAM предпочтительнее, чем InnoDB, когда мы создаем кластерное хранилище? Почему, если это так? - PullRequest
3 голосов
/ 30 октября 2009

Я слышал это сегодня во время интервью для Java-разработчика. Мне пришлось перечислить некоторые преимущества MyISAM перед InnoDB и почему он до сих пор широко используется. И они ждали ответа от меня в заголовке этого вопроса.

Как я понимаю из собственного ответа: MyISAM не имеет внешних ключей, и БД можно легко кластеризовать (например, одна таблица на сервер). Но почему мы не можем просто создать таблицы InnoDB без внешних ключей? Это объяснение звучит странно для меня ..

Ответы [ 5 ]

8 голосов
/ 30 октября 2009

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

InnoDB:

  • поддерживает ФК
  • поддерживает транзакции
  • использует большой буфер памяти для работы
  • поддерживает блокировку на уровне строк
  • Но имеет гораздо более высокую стоимость обслуживания - вам действительно нужно настроить использование памяти, настроить файлы таблиц и т. Д.

MyISAM:

  • имеет ряд специальных функций для столбцов, которых нет в InnoDB, например:
    • полнотекстовые индексы
    • пространственные столбцы (я уверен, что это не работает с InnoDB)
  • Очень быстро для основных случаев чтения / добавления (таблица блокирует обновления, удаляет, но не вставляет)
  • Также обычно имеет более быстрые вставки
  • кэширует индексы в памяти (буфер ключей), но полагается на ОС для буферизации реальных страниц данных

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

Для хранилищ данных, ведения журналов, отчетов и т. Д. Я бы, вероятно, использовал MyISAM.

4 голосов
/ 30 октября 2009

Мне пришлось перечислить некоторые преимущества MyISAM по сравнению с InnoDB

  1. ПОЛНЫЙ ТЕКСТ поиск

  2. ...

  3. нет, все.

(ОК, есть в некоторых случаях, когда MyISAM работает быстрее, чем InnoDB, но достаточно редко, что стоит мириться с отсутствием ACID-соответствия. Сегодня основная причина сделать что-либо с MyISAM - получить полнотекстовый поиск, который, к сожалению, не поддерживается в InnoDB.)

1 голос
/ 30 октября 2009

Я не уверен, что это больше не так, MyISAM быстрее, чем InnoDB для чтения.

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

По умолчанию базы данных InnoDB хранятся в одном огромном глобусе в файловой системе.

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

0 голосов
/ 30 октября 2009

Вам необходимо прочитать в блоге Mysql Peformance .

0 голосов
/ 30 октября 2009

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

Есть также некоторые различия в блокировке и доступе. InnoDB поддерживает блокировку на уровне строк, тогда как MyISAM поддерживает только блокировку на уровне таблиц. В зависимости от запросов, которые вы выполняете (SELECTS против INSERTS / UPDATES), это может заметно повлиять на производительность.

...