Каково различие между InnoDB и MyISAM?

Если это было протестировано, и Вы довольны им работающий затем, необходимо работать с народом безопасности, чтобы иметь соединения с позволенным через брандмауэр на HTTP / HTTPS.

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

При регистрации большего количества деталей относительно технологий, Вы используете (MySQL / MS SQL, Вы человек безопасности, и т.д.), затем, больше подробной информации может быть предоставлено о том, как реализовать это.

17
задан 15 April 2015 в 18:52
5 ответов

ISAM = Индексно-последовательный метод доступа и является по существу плоским файлом (для тех DBAs, кто может помнить, думайте Btrieve или B-дерево). Это - очень старая технология - но не позволяйте, которые помещают Вас от использования его. Поскольку это - плоский файл (больше на том позже), это не является реляционным, и таким образом не является RDBMS и таким образом является более соответствующим в некоторых ситуациях.

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

ISAM является блестящим, если у Вас есть МНОГО записей (как, 20 миллионов), и записи главным образом автономны (т.е. Вы не должны делать большого количества ссылок для получения связанных данных). Это полагается ОЧЕНЬ в большой степени на индексы и если Вы не имеете правильного индекса, готовитесь в течение очень очень долгих времен запроса. Рассматриваемый вопрос: у Нас была таблица Btrieve ISAM с 20M + записи и сделать, данные получения и фильтра на основе точного индекса были почти мгновенны. Используя неправильный индекс были буквально 15 минут.

InnoDB является большим для того, если у Вас есть много реляционных ссылок. Представьте в виде таблицы ссылки поле в Таблице B, который ссылочная Таблица C и D. InnoDB может выбрать эти записи с помощью всех видов хороших методов присоединения (хэширования, и т.д.), тогда как база данных ISAM должна была бы выполнить несколько подзапросов для каждой строки и соответствовать записям вручную.

Необходимо будет действительно сделать курс в базах данных, если Вы хотите намного больше детали, чем это!

14
ответ дан 2 December 2019 в 20:31
  • 1
    ISAM является столь же реляционным как что-либо еще, it' s просто не оптимизированный для него. –  LapTop006 17 August 2009 в 15:17
  • 2
    спасибо 4 Ваших кратких описания. Теперь в основном я очищен –   18 August 2009 в 14:15

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

5
ответ дан 2 December 2019 в 20:31

В эти дни, если Вы не используете таблицу для, регистрируют данные стиля (затем ВЫБОР значительно большего количества ВСТАВКИ, никакие транзакции), InnoDB обычно быстрее, более надежен, имеет больше функций, и т.д.

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

Так или иначе необходимо настроить MySQL, поскольку значения по умолчанию по существу установлены для 32 МБ Pentium, это совместно используется с другими сервисами.

2
ответ дан 2 December 2019 в 20:31

Обычно эмпирическое правило, если Вы хотите скорость, используйте MyISAM и если Вы хотите устойчивость, используйте InnoDB. Что-то, чтобы сделать с атомарностью, если я помню правильно.

1
ответ дан 2 December 2019 в 20:31
  • 1
    Excecpt that' s больше не верный, InnoDB на самом деле быстрее в большинстве случаев. –  LapTop006 17 August 2009 в 15:16
  • 2
    кто-то может добавить ссылку некоторые сравнительные тесты или что-то...? –  Johan 17 August 2009 в 16:32

Немного поздновато к игре... но вот довольно полный пост , который я написал несколько месяцев назад , подробно описывая основные различия между МИЗАМ и InnoDB. Возьмите чашку чая (и, может быть, печенье) и наслаждайтесь.


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

Ссылочная целостность

Ссылочная целостность гарантирует, что отношения между таблицами останутся последовательными. Говоря более конкретно, это означает, что когда таблица (например, Листинги) имеет посторонний ключ (например, Product ID), указывающий на другую таблицу (например, Продукты), когда обновления или удаления происходят в таблице с указанием на нее, эти изменения каскадируются в таблицу с указанием ссылок. В нашем примере, если продукт переименован, внешние ключи связывающей таблицы также обновляются; если продукт удален из таблицы "Продукты", любые списки, указывающие на удаленную запись, также удаляются. Более того, любой новый список должен содержать иностранный ключ, указывающий на действительную, существующую запись.

InnoDB является реляционной СУБД (СУБД) и, таким образом, обладает ссылочной целостностью, в то время как MyISAM - нет.

Transactions & Atomicity

Data in a table управляется с помощью операторов языка манипулирования данными (DML), таких как SELECT, INSERT, UPDATE и DELETE. Операции группы транзакций, состоящей из двух или более операторов DML, объединяются в один блок работы, поэтому либо применяется весь блок, либо ни один из них не поддерживается.

MyISAM не поддерживает транзакции, в то время как InnoDB поддерживает.

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

Если операция прерывается при использовании таблицы InnoDB, т.к. она использует транзакции, которые имеют атомарность, то любая транзакция, которая не дошла до завершения, не вступит в силу, т.к. не производится фиксация.

Блокировка таблицы против блокировки строк

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

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

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

Транзакции и откаты

Когда вы выполняете операцию в MyISAM, изменения устанавливаются; в InnoDB эти изменения могут быть откачены обратно. Наиболее распространенными командами, используемыми для управления транзакциями, являются COMMIT, ROLLBACK и SAVEPOINT. 1. COMMIT - Вы можете написать несколько DML-операций, но изменения будут сохранены только тогда, когда COMMIT будет сделан 2. ROLLBACK - Вы можете отказаться от любых операций, которые еще не были зафиксированы 3. SAVEPOINT - устанавливает точку в списке операций, к которой операция ROLLBACK может откатиться к

Reliability

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

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

FULLTEXT индексирование

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

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

Заключение

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

.
2
ответ дан 2 December 2019 в 20:31

Теги

Похожие вопросы