Есть ли способ заставить MySQL обрабатывать большое количество одновременных записей? - PullRequest
0 голосов
/ 20 февраля 2012

Я застрял между молотом и наковальней с приложением, которое я делал.По сути, программа генерирует очень большой набор данных (его объем превышает 10 гигабайт и превышает объем памяти на сервере, и его трудно перенести этот набор данных из словаря на другие серверы в дальнейшем).Я решил использовать базу данных для хранения данных, но столкнулся с проблемой, при которой, когда я запускаю больше процессов, они не используют более 10% доступного ядра, но служба mysql всегда составляет около 60-100%.

Ядро, использующее mysql, работает на 60-100%.Я прошел базовые курсы по MySQL, но я ни в коем случае не эксперт по этому вопросу, и я просто использую его для хранения / распространения локальных переменных программы.Любые предложения о том, как я могу устранить неполадки или даже если эту проблему можно решить?У меня была одна идея: хотя моя память не может хранить всю базу данных, которую я планирую написать, я бы хотел, чтобы сервер использовал некоторую память для обработки некоторых запросов, а затем, возможно, записывал их по мере заполнения памяти (сейчас mysql использует меньше 1% серверной памяти).

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

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Кажется, вы просто хотите сохранить много данных, которые генерируются (или принимаются) вашим кодом, и вы не хотите их часто получать (в этой части кода). Если это так, и ваша скорость генерации данных очень высока, я рекомендую использовать базу данных NoSQL, такую ​​как MongoDB, вместо MySQL. Они просто созданы для большого количества наборов данных, они готовы для кластеров и ... (просто перейдите к их документации).

1 голос
/ 20 февраля 2012

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

Что вы подразумеваете под большим количеством записей? 10? 100? 1000? в секунду?

Какую схему вы пытаетесь написать? Какие индексы реализованы на схеме?

У вас есть тяжелые операции чтения или записи?

Что вы делаете во время написания? Это одна строка, которую вы пишете, или это несколько операций, заключенных в транзакцию?

Какая конфигурация сервера? Объем памяти? Диск? Версия MySQL.

Используете ли вы Innodb для базы данных?

Теперь вы можете попробовать запустить SHOW FULL PROCESSLIST ;. Это покажет вам, происходит ли какой-либо тип блокировки - если вы видите много процессов в заблокированном состоянии, то найдите один из процессов, который не заблокирован, и посмотрите, может ли это вызывать блокировку. См. http://dev.mysql.com/doc/refman/5.0/en/show-processlist.html для получения дополнительной информации об этой команде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...