MyISAM против InnoDB [закрыто]

После того, как вы нарисовали график линии, вы можете покрасить его с помощью segments():

seq1 <- seq(from=1, to=10, by=0.1)
values <- sin(seq1)
s <- seq(length(seq1)-1)
segments(seq1[s], values[s], seq1[s+1], values[s+1], col=ifelse(values > 0.5, "red", "yellow"))

enter image description here [/g0]

847
задан Brad Larson 26 February 2013 в 21:30
поделиться

9 ответов

Каждое приложение имеет свой собственный профиль производительности для использования базы данных, и возможности - он, будет изменяться со временем.

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

4
ответ дан Gary Richardson 26 February 2013 в 21:30
поделиться

Я не эксперт по базе данных, и я не говорю на основе опыта. Однако:

таблицы MyISAM используют уровень таблицы, блокирующий . На основе Ваших транспортных оценок Вы имеете близко к 200 записям в секунду. С MyISAM только один из них мог произойти в любое время . Необходимо удостовериться, что аппаратные средства могут не отставать от них транзакция, чтобы не превышаться, т.е. единый запрос может взять не больше, чем 5 мс.

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

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

267
ответ дан BlueRaja - Danny Pflughoeft 26 February 2013 в 21:30
поделиться

По моему опыту, MyISAM был лучшим выбором, пока Вы не делаете, УДАЛЯЕТ, ОБНОВЛЕНИЯ, много единственной ВСТАВКИ, транзакций и полнотекстового индексирования. BTW, ПРОВЕРЬТЕ, что ТАБЛИЦА ужасна. Поскольку таблица становится старше с точки зрения количества строк, Вы не знаете, когда это закончится.

5
ответ дан yogman 26 February 2013 в 21:30
поделиться
  • 1
    Спасибо за помощь. Интересно, я couldn' t получают любую из опций Вы или Двин, предложенный для read.table работать..., но read.csv добивается цели! – user1257313 9 March 2012 в 19:25

Для загрузки с большим количеством записей и чтений, Вы извлечете выгоду из InnoDB. Поскольку InnoDB обеспечивает блокировку строки, а не блокировку таблицы, Ваш SELECT, с может быть параллельной, не только друг с другом, но также и со многими INSERT с. Однако, если Вы не намереваетесь использовать транзакции SQL, установить InnoDB, передают сброс 2 ( innodb_flush_log_at_trx_commit). Это дает Вам назад большую необработанную производительность, которую Вы иначе потеряли бы когда движущиеся таблицы от MyISAM до InnoDB.

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

Наконец, знать о различных загрузках таблицы. У Вас не будет того же отношения чтения-записи на всех таблицах. Некоторые меньшие таблицы приблизительно с 100%-ми чтениями могли позволить себе остаться MyISAM. Аналогично, если у Вас есть некоторые таблицы, которые являются близкой 100%-й записью, можно извлечь выгоду от INSERT DELAYED, но это только поддерживается в MyISAM (DELAYED, пункт проигнорирован для таблицы InnoDB).

, Но сравнительный тест, чтобы быть уверенным.

64
ответ дан Denilson Sá Maia 26 February 2013 в 21:30
поделиться
  • 1
    Мое решение далеко от трудной воды. Это требует, чтобы значения были в состоянии быть сохраненным в string. Например, если Вы получите Нулевое значение от дб, у Вас будет ошибка потому что строка can' t быть nil. Я обновил использование ответа [] байт и проверка nil значения. – ANisus 24 January 2013 в 13:51

Я работал над системным MySQL использования большого объема, и я попробовал и MyISAM и InnoDB.

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

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

Это также позволило, удаляет (данные были чувствительны ко времени, и мы только сохранили ценность X дней) произойти на "устаревших" таблицах, которые снова не были затронуты запросами Select. InnoDB, кажется, имеет низкую производительность на объеме, удаляет поэтому, если Вы - планирование чистки данных, Вы могли бы хотеть структурировать его таким способом, которым старые данные находятся в устаревшей таблице, которая может просто быть отброшена вместо выполнения, удаляет на нем.

, Конечно, я понятия не имею, что Ваше приложение слишком, надо надеяться, это дает Вам некоторое понимание некоторых проблем с MyISAM и InnoDB.

138
ответ дан alanc10n 26 February 2013 в 21:30
поделиться

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

Поэтому я думаю, что необходимо использовать InnoDB.

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

, Если можно получить маленький удар длительности, Вы могли бы использовать InnoDB с набором innodb_flush_log_at_trx_commit к 0 или 2 (см. документы для деталей), можно улучшить производительность.

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

25
ответ дан MarkR 26 February 2013 в 21:30
поделиться
  • 1
    Спасибо, на данный момент это предназначается для MySQL, таким образом, it' s базовые типы только. – Arne 23 January 2013 в 13:14

myisam - это NOGO для этого типа рабочей нагрузки (запись с высоким параллелизмом), у меня нет такого большого опыта работы с innodb (тестировал его 3 раза и нашел в каждом случай, что производительность отстой, но с последнего теста прошло некоторое время) если вас не заставляют запускать mysql, попробуйте postgres, поскольку он обрабатывает параллельные записи НАМНОГО лучше

3
ответ дан 22 November 2019 в 21:11
поделиться

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

1
ответ дан 22 November 2019 в 21:11
поделиться

Я думаю, что это отличная статья, в которой объясняются различия и когда следует использовать одно вместо другого: http://tag1consulting.com/MySQL_Engines_MyISAM_vs_InnoDB

11
ответ дан 22 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

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