После того, как вы нарисовали график линии, вы можете покрасить его с помощью 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"))
[/g0]
Каждое приложение имеет свой собственный профиль производительности для использования базы данных, и возможности - он, будет изменяться со временем.
лучшая вещь, которую можно сделать, состоит в том, чтобы протестировать опции. Переключение между MyISAM и InnoDB тривиально, так загрузите некоторые данные тестирования и запустите jmeter против Вашего сайта и посмотрите то, что происходит.
Я не эксперт по базе данных, и я не говорю на основе опыта. Однако:
таблицы MyISAM используют уровень таблицы, блокирующий . На основе Ваших транспортных оценок Вы имеете близко к 200 записям в секунду. С MyISAM только один из них мог произойти в любое время . Необходимо удостовериться, что аппаратные средства могут не отставать от них транзакция, чтобы не превышаться, т.е. единый запрос может взять не больше, чем 5 мс.
, Который намекает мне, что Вам был бы нужен механизм устройства хранения данных, который поддерживает блокировку уровня строки, т.е. InnoDB.
, С другой стороны, это должно быть довольно тривиально для записи нескольких простых сценариев для моделирования загрузки с каждым механизмом устройства хранения данных, затем сравнить результаты.
По моему опыту, MyISAM был лучшим выбором, пока Вы не делаете, УДАЛЯЕТ, ОБНОВЛЕНИЯ, много единственной ВСТАВКИ, транзакций и полнотекстового индексирования. BTW, ПРОВЕРЬТЕ, что ТАБЛИЦА ужасна. Поскольку таблица становится старше с точки зрения количества строк, Вы не знаете, когда это закончится.
Для загрузки с большим количеством записей и чтений, Вы извлечете выгоду из InnoDB. Поскольку InnoDB обеспечивает блокировку строки, а не блокировку таблицы, Ваш SELECT
, с может быть параллельной, не только друг с другом, но также и со многими INSERT
с. Однако, если Вы не намереваетесь использовать транзакции SQL, установить InnoDB, передают сброс 2 ( innodb_flush_log_at_trx_commit). Это дает Вам назад большую необработанную производительность, которую Вы иначе потеряли бы когда движущиеся таблицы от MyISAM до InnoDB.
кроме того, рассмотрите добавляющую репликацию. Это дает Вам некоторое масштабирование чтения и так как Вы заявили, что Ваши чтения не должны быть актуальными, можно позволить репликации отстать немного. Просто убедитесь, что это может нагнать под чем-либо кроме самого тяжелого трафика, или это всегда будет позади и никогда не будет нагонять. Если Вы идете этим путем, однако, я сильно рекомендую изолировать чтение из ведомых устройств и управления задержкой репликации к обработчику баз данных. Это настолько более просто, если код приложения не знает об этом.
Наконец, знать о различных загрузках таблицы. У Вас не будет того же отношения чтения-записи на всех таблицах. Некоторые меньшие таблицы приблизительно с 100%-ми чтениями могли позволить себе остаться MyISAM. Аналогично, если у Вас есть некоторые таблицы, которые являются близкой 100%-й записью, можно извлечь выгоду от INSERT DELAYED
, но это только поддерживается в MyISAM (DELAYED
, пункт проигнорирован для таблицы InnoDB).
, Но сравнительный тест, чтобы быть уверенным.
string
. Например, если Вы получите Нулевое значение от дб, у Вас будет ошибка потому что строка can' t быть nil
. Я обновил использование ответа [] байт и проверка nil
значения.
– ANisus
24 January 2013 в 13:51
Я работал над системным MySQL использования большого объема, и я попробовал и MyISAM и InnoDB.
я нашел, что привязка уровня таблицы, MyISAM вызвал серьезные проблемы производительности для нашей рабочей нагрузки, которая звучит подобной Вашей. К сожалению, я также нашел, что производительность под InnoDB была также хуже, чем я надеялся.
В конце я решил состязательный вопрос путем фрагментации данных, таким образом, который вставляет, вошел в "горячую" таблицу и выбирает, никогда не запрашивал горячую таблицу.
Это также позволило, удаляет (данные были чувствительны ко времени, и мы только сохранили ценность X дней) произойти на "устаревших" таблицах, которые снова не были затронуты запросами Select. InnoDB, кажется, имеет низкую производительность на объеме, удаляет поэтому, если Вы - планирование чистки данных, Вы могли бы хотеть структурировать его таким способом, которым старые данные находятся в устаревшей таблице, которая может просто быть отброшена вместо выполнения, удаляет на нем.
, Конечно, я понятия не имею, что Ваше приложение слишком, надо надеяться, это дает Вам некоторое понимание некоторых проблем с MyISAM и InnoDB.
При использовании MyISAM Вы не будете делать никакой транзакции в час, если Вы не будете полагать, что каждый оператор DML транзакция (который в любом случае, не будет длительным или атомарным в случае катастрофического отказа).
Поэтому я думаю, что необходимо использовать InnoDB.
300 транзакций в секунду походит на довольно много. Если Вам абсолютно нужны эти транзакции, чтобы быть длительными через сбой питания, удостоверяются, что Ваша подсистема ввода-вывода может обработать это много записей в секунду легко. Вам будет нужен, по крайней мере, RAID-контроллер с кэшем с аварийным батарейным питанием.
, Если можно получить маленький удар длительности, Вы могли бы использовать InnoDB с набором innodb_flush_log_at_trx_commit к 0 или 2 (см. документы для деталей), можно улучшить производительность.
существует много патчей, которые могут увеличить параллелизм с Google и других - они могут представлять интерес, если Вы все еще не можете получить достаточно производительности без них.
myisam - это NOGO для этого типа рабочей нагрузки (запись с высоким параллелизмом), у меня нет такого большого опыта работы с innodb (тестировал его 3 раза и нашел в каждом случай, что производительность отстой, но с последнего теста прошло некоторое время) если вас не заставляют запускать mysql, попробуйте postgres, поскольку он обрабатывает параллельные записи НАМНОГО лучше
Для такого соотношения чтения/записи я бы предположил, что InnoDB будет работать лучше. Поскольку вы не против грязных чтений, вы можете (если вы можете себе это позволить) реплицировать на ведомое устройство и позволить всем вашим чтениям идти на ведомое устройство. Также, рассмотрите возможность вставки в массовом порядке, а не по одной записи за раз.
Я думаю, что это отличная статья, в которой объясняются различия и когда следует использовать одно вместо другого: http://tag1consulting.com/MySQL_Engines_MyISAM_vs_InnoDB