Какого движка нет в mysql
Перейти к содержимому

Какого движка нет в mysql

  • автор:

В чем разница между InnoDB и MyISAM?

В версии сервера MySQL 3.23.44 и выше таблицы InnoDB поддерживают проверку ограничений внешних ключей.

30 ноя 2011 в 15:18

До недавнего времени InnoDB не поддерживала полнотекстовые индексы.
InnoDB не хранит ни количество строк в таблице, ни следующее значение автоинкрементного поля. Первое не так важно, поскольку мало кому бывает нужно считать все строки в таблице, без какого бы то ни было фильтра. А вот второе в теории чревато. Если после удаления последнего выданного id сервер будет перегружен, то id будет выделен повторно. Впрочем, я не слышал о случавшихся такого рода косяках на практике

Отслеживать
ответ дан 6 мая 2015 в 12:04
20.9k 4 4 золотых знака 29 29 серебряных знаков 50 50 бронзовых знаков

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

Отслеживать
ответ дан 18 окт 2016 в 17:18
9 1 1 бронзовый знак

Главное в InnoDB это блокировки по строкам, что соответствует логике архитектуры при которой субъектом данных является именно строка. Нарушение этой логики приводит к непредсказуемым последствиям. Например, если приложение имеет собственный порядок исполнения и в этом порядке есть работа с базой данных, то порядок работы приложения может вступить в конфликт с порядком организации данных в MyISAM. И будет так называемый Deadlock: часть приложения ждет другую часть, а другая часть ждет данных в базе заблокированных первой частью приложения.

Отслеживать
ответ дан 24 апр 2022 в 13:40
11 1 1 бронзовый знак

Если коротко, то в InnoDB есть поддержка транзакций, а у MyISAM нету. И еще MyISAM в отличие от InnoDB поддерживает текстовую индексацию. В основном используется MyISAM .

Отслеживать
ответ дан 30 ноя 2011 в 15:11
1,262 7 7 золотых знаков 26 26 серебряных знаков 63 63 бронзовых знака

  • mysql
  • innodb
  • myisam
    Важное на Мете
Связанные
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.4.30.8420

Самый главный аргумент против MySQL?

Недавняя серия статей («Памятка евангелиста PostgreSQL: критикуем MySQL грамотно» 1,2,3) зацепила за живое.

Так получилось, что моя команда унаследовала, истеорически сложившуюся систему, с 300+ объектами, где одним из ключевых компонентов системы выступает именно MySQL. На некоторых объектах также используется репликация. ПО использующее MySQL от стороннего разработчика.

Большинство объектов находится в удалённых от «человека разумного» регионах (горы, степь). Некоторые объекты находятся в ~200км от ближайшего населённого пункта. Перебои с электропитанием на этих объектах, дело вполне обычное и регулярное. ИБП очень выручают, но иногда и они не в состоянии спасти от продолжительного блэкаута. А чаще всего от серии блэкаутов. Тоесть ИБП ещё не зарядился, оборудование уже включено и работает, пишет данные в БД, и тут ЭП начинает пропадать и появляться, и снова пропадать. Системы падают.
До апгрейда MySQL до версии 5.6.23, в месяц приходилось восстанавливать вручную две-три БД. Сейчас восстанавливать приходится реже, но всё равно приходится. С августа месяца восстанавливали всего две БД.

После одной из статей kaamos, мы начали тестировать 5.6.26 и тестирование показало, что эта версия ещё более живуча. Однако условия сайтов, полноценно симулировать мы не можем (около 20 типов сайтов). Профиль нагрузки на всех этих типах разный, хотя модель БД одна.

Итак, ключевое условие проблемы:
У нас есть таблицы с внешними ключами и ON DELETE CASCADE ON UPDATE CASCADE, на некоторых таблицах которые референцируются на вышеназванные, установлены триггеры.

Вполне возможно, — это плохой дизайн модели данных для MySQL. Почему? Только сегодня наткнулся на следующее утверждение:

Если данное утверждение верно, то буква ‘C’ из ACID, в нашем случае совершенно не гарантирована.

И тогда не стоит удивляться сообщениям об ошибках вида:
[ERROR] Table ./database/table has no primary key in InnoDB data dictionary, but has one in MySQL!

Также похоже не стоит на 100% надеяться на консистентность при репликации.

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

Однако, сколько ещё сюрпризов таит в себе многоуровневая архитектура MySQL?

Краткий обзор движков таблиц MySQL

Цель этой статьи — дать краткий, очень сжатый обзор движков, для того, чтобы статьей можно было пользоваться при выборе движка на этапе проектирования \ создания \ оптимизации таблицы. Предполагается, что читатель знает суть вопроса по крайней мере поверхностно и способен сам отыскать всю дополнительную информацию (вопросы в комментах можно задавать всегда 🙂 )

MyISAM
  • транзакций нет
  • макс. диск: 256Тб
  • блокировка таблица
  • полнотекстовый поиск
  • работа в кластере: нет
  • поддержание целостности, внешние ключи: нет
  • репликация: да
  • макс. индексов: 64
  • макс. записей: 2^32
  • макс. длина ключа: 1000 байт
  • ключи занимают место на диске до (макс.): (key_length+4)/0.67
  • чувствительные к «падению» сервера, сложно восстанавливать
  • при отсутствии «дырок» (gaps) — вставки не конкурентные (блокировок не происходит)
  • возможно хранить файлы данных и индексов на разных устройствах
  • каждый столбец может иметь свою кодировку
  • макс. сумма длин VARCHAR и CHAR: 64к
Static (Fixed-length) формат таблиц
  • автоматически, если нет VARCHAR, VARBINARY, BLOB, TEXT столбцов
  • быстрее, безопаснее (устойчивее), лучше кешируется, требует больше места на диске
  • если указать принудительно, VARCHAR и CHAR заполняются пробелами, VARBINARY — нулями
Dynamic length формат таблиц
  • все строки длиной до 4 — VARCHAR
  • пустые строки и ноль (0) не занимают места на диске (NULL это не ноль)
  • запись (строка) фрагментируется автоматически при апдейтах (нужно запускать OPTIMIZE TABLE для дефрагментации)
  • сложнее восстановить при сбоях
Compressed
  • создается утилитой myisampack
  • read-only
  • рекомендуется для очень медленных носителей
  • может быть и fixed-length и dynamic-length
  • посмотрите в сторону Archive table engine
  • говорят, что MyISAM таблицы обязательно «ломаются» рано или поздно, так что будте готовы 😉
  • не убивайте сервер во время записи
  • не изменяйте таблицы несколькими серверами одновременно
  • не изменяйте таблицы утилитой и сервером одновременно
InnoDB
  • макс. диск: 64Тб
  • полная поддержка транзакций (4 уровня изоляции)
  • блокировка записи (не таблицы), два вида блокировок (SHARED, EXCLUSIVE)
  • полнотекстовый индекс: нет
  • безопасная для транзакций
  • индексы кластеризуются для «типичных запросов»
  • поддержка целостности (внешние ключи)
  • может использоваться на ОС с ограниченным размером файла
  • множество настроек для оптимизации
  • позволяет использовать Raw Disk для таблиц в обход ФС
  • по умолчанию включен AUTOCOMMIT (SET autocommit=1)
  • автоматически детектит дэдлоки (deadlocks)
  • SELECT (*) FROM table работает гораздо медленнее, чем MyISAM — создавайте триггеры если нужно
  • бэкап простым копирование файлов невозможен
  • mysqldump работает медленно, для бэкапа используйте InnodDb Hot Backup
  • следите за индексами, выгода InnoDB теряется, если для запросов нет индексов
MERGE
  • Используется для объединения одинаковых таблиц в одну
  • таблицы должны иметь идентичную структуру
  • порядок столбцов должен совпадать
  • DROP не удаляет исходных таблиц
  • таблицы могут быть в другой базе данных
  • можно использовать для алиасов (для одной таблицы)
  • нельзя пользоваться FULLTEXT search
  • нельзя смешивать временные и не временные таблицы
  • медленная при чтении по ключу
  • REPLACE не работает
  • не отслеживаются изменения в структуре исходных таблиц (таблица будет поломана)
HEAP (MEMORY)
  • транзакций нет
  • блокировка таблицы
  • репликация: да
  • макс. длина ключа: 500 байт
  • все данные теряются при остановке сервера (сама таблица остаётся)
  • формат хранения: всегда fixed-length row
  • память не высвобождается при удалении записи (используется для вставки новых)

большие таблицы «свопяться» на диск и выигрыш теряется

Рекомендации: Локальные вычисления, временные данные

ARCHIVE
  • макс. диск: нет ограничения
  • блокировка записи
  • не работает DELETE, REPLACE, UPDATE, ORDER BY, тип BLOB
  • INSERT буферизируется и «сливается» с большой задержкой
  • очень медленный SELECT
CSV
  • хранит таблицы в CSV формате
  • позволяет редактировать таблицы внешними приложениями
  • плохо документирован, есть открытые баги
FEDERATED

Представляет собой «прозрачное» подключение к другому серверу (не репликация). Есть множество ограничений, планируется возможность подключения к отличным от MySQL серверам.

BLACKHOLE
  • данные идут «вникуда»
  • двоичные логи пишуться
Тренды, MySQL 6.0
  • Maria — «улучшенный MyISAM»
  • Falcon — «улучшенный InnoDb», улучшенная производительность, для Web серверов

Отсутствующие движки в MySQL

uchet-jkh.ru

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

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

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

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

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

Отсутствующие движки в MySQL: полный обзор

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

1. InnoDB

Первым отсутствующим движком в MySQL является InnoDB. Ранее InnoDB был одним из самых популярных движков для работы с данными в MySQL. Однако, с приобретением Sun Microsystems компания Oracle решила сделать InnoDB единственным официально поддерживаемым движком в MySQL. Поэтому, хотя InnoDB все еще доступен и может быть использован, его развитие и поддержка сосредоточены на уровне разработчика MySQL.

2. MyISAM

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

3. Falcon

Falcon — это еще один движок, который отсутствует в MySQL. Falcon был разработан компанией MySQL AB как новый, транзакционный движок для MySQL. Однако, разработка Falcon была прекращена после слияния MySQL AB с Sun Microsystems, и с тех пор он больше не разрабатывается и не поддерживается в MySQL.

4. SolidDB

SolidDB был приобретен компанией IBM и доступен только как отдельный продукт, не входящий в стандартную поставку MySQL.

5. PBXT

PBXT был транзакционным движком для MySQL, разработанным компанией PrimeBase Technologies. Однако, PBXT значительно уступает в популярности InnoDB и другим движкам, и поэтому был удален из стандартной поставки MySQL.

6. MariaDB и XtraDB

MariaDB — это форк MySQL, который был создан после того, как Oracle приобрел Sun Microsystems. MariaDB содержит ряд улучшений и новых функций, включая улучшенный движок InnoDB, называемый XtraDB. XtraDB является совместимым с InnoDB, но предлагает несколько дополнительных функций и улучшений. Оба MariaDB и XtraDB предоставляют альтернативные реализации движка InnoDB для MySQL.

7. Percona Server

Percona Server — это другой форк MySQL, который предлагает улучшенные функции и производительность по сравнению с официальной версией MySQL. Percona Server также включает в себя XtraDB, альтернативную реализацию движка InnoDB, и другие перформанс-ориентированные улучшения.

Заключение

Хотя MySQL предлагает широкий выбор движков для управления данными, не все они поддерживаются или доступны в стандартной поставке MySQL. Некоторые, такие как InnoDB и MyISAM все еще могут быть использованы, но развитие и поддержка этих движков сосредоточены на уровне разработчика MySQL. Другие движки, такие как Falcon, SolidDB и PBXT, были удалены из стандартной поставки MySQL и больше не разрабатываются или поддерживаются. Однако, существуют альтернативные реализации движков, такие как XtraDB в MariaDB и Percona Server, которые предлагают улучшенные функции и производительность по сравнению с официальной версией MySQL.

Движок Federated: отсутствует в MySQL

Движок Federated, который был представлен в MySQL версии 5.0, был убран из MySQL в версии 5.7.20 и не доступен в более новых версиях.

Federated Engine позволял создавать таблицы в удаленных MySQL серверах и использовать эти таблицы как будто они находятся локально. Это позволяло сделать запросы к удаленным данным, не требуя репликации или копирования данных на локальный сервер.

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

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

Если вы планируете использовать распределенные данные в MySQL, вам следует обратить внимание на другие интересные технологии, такие как Replication, InnoDB Cluster, или NDB Cluster, которые предлагают более современные и надежные способы работы с распределенными данными.

Движок Archive: отсутствует в MySQL

Движок Archive является одним из нескольких типов таблиц, доступных в MySQL, и отличается от других типов своей особенностью – он предназначен для хранения архивных данных.

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

Несмотря на эти преимущества, движок Archive не входит в стандартный набор движков, поставляемых с MySQL. Он является дополнительным и должен быть установлен отдельно. При этом следует учитывать, что использование движка Archive может быть ограничено некоторыми ограничениями и недостатками:

  • Данные в таблице, хранящейся на движке Archive, нельзя изменять, только добавлять или удалять записи. Изменение существующих данных требует пересоздания всей таблицы.
  • Движок Archive не поддерживает использование индексов. Это означает, что поиск данных по значению столбца может занимать значительное время.
  • По умолчанию, файлы таблицы в движке Archive не могут превышать 1 ТБ. Это ограничение может быть увеличено при помощи специальных настроек, но не более 32 ТБ.
  • В движке Archive, в отличие от других движков MySQL, отсутствует поддержка транзакций и блокировок. Это делает его неприменимым для хранения данных, требующих согласованности и безопасности использования.

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

Движок PBXT: отсутствует в MySQL

Несмотря на то, что MySQL предлагает богатый набор встроенных движков таблиц, движок PBXT не является одним из них. PBXT был разработан Paul McCullagh и запущен в 2009 году с целью улучшить производительность чтения и записи данных в MySQL.

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

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

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

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

Вопрос-ответ

Какие движки отсутствуют в MySQL?

В MySQL отсутствуют такие движки, как InnoDB Cluster, NDB Cluster, TokuDB, MyISAM, Archive, Merge и Blackhole.

Почему в MySQL отсутствует движок InnoDB Cluster?

Движок InnoDB Cluster отсутствует в MySQL, потому что он предназначен для работы с MySQL Group Replication, а не со стандартным MySQL Server.

Какие преимущества и недостатки отсутствия движка NDB Cluster в MySQL?

Преимущества отсутствия движка NDB Cluster в MySQL включают упрощение администрирования баз данных и возможность использования других движков с более широкими возможностями. Однако, это также означает, что нельзя использовать масштабируемость и высокую доступность, предоставляемые NDB Cluster.

Какие движки можно использовать вместо MyISAM в MySQL?

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *