сокращение ввода / вывода в приложении и базе данных - PullRequest
2 голосов
/ 24 марта 2011

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

Я в основном разрабатываю скрипт на python для анализа данных и загрузки их в mysql.Когда-то в mysql, я делаю довольно тяжелую аналитику (создавая новые столбцы, таблицы ... в основном много математических и финансовых анализов для большого набора данных).Так есть ли какие-либо передовые методы проектирования, чтобы избежать тяжелых операций ввода-вывода?Я думаю, что memcached хранит все в памяти и обращается к нему оттуда, есть ли способ заставить mysql или другие скрипты делать то же самое?

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

Ответы [ 2 ]

0 голосов
/ 25 марта 2011

Вы не указали, было ли это запись или чтение.Я предполагаю, что вы можете сделать все это в экземпляре mysql в ramdisc (tmpfs под Linux).

Такие операции, как ALTER TABLE и копирование больших данных, в конечном итоге создают много запросов ввода-вывода, потому что они перемещаютмного данных.Это не то же самое, что если вы только что получили много случайных (или более предсказуемых запросов).

Если это пакетная операция, возможно, вы можете сделать это полностью в экземпляре tmpfs.

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

0 голосов
/ 25 марта 2011

Под IO я предполагаю, что вы имеете в виду дисковый IO ... и при условии, что вы можете поместить все в память удобно . Вы могли бы:

  • Отключить своп на вашем боксе †
  • Используйте таблицы mysql MEMORY во время обработки (или, возможно, рассмотрите возможность использования Sqlite3 в памяти, если вы используете базу данных только для удобства запросов SQL)

Также: если вы не используете EBS, я не думаю, что Amazon взимает плату за IO в вашем экземпляре. EBS намного медленнее, чем хранилище вашего экземпляра, поэтому используйте его только тогда, когда вам нужно постоянство, т.е. пока вы не перебираете данные.

† вероятно, плохая идея

...