Правда ли, что движок MyISAM более предпочтителен, чем InnoDB, когда мы создаем кластерное хранилище?Почему, если это так?

StackOverflow https://stackoverflow.com/questions/1647023

Вопрос

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

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

Это было полезно?

Решение

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

ИнноДБ:

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

МойИСАМ:

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

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

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

Другие советы

  

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

<Ол>
  • Поиск FULLTEXT

  • ...

  • нет, все.

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

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

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

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

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top