MySQL InnoDB подходит для этого сценария? - PullRequest
1 голос
/ 21 апреля 2010

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

Для анализа мне нужно выполнить несколько параллельных запросов.Запросы являются независимыми (т. Е. Результаты запросов не объединяются), но большую часть времени они работают с одними и теми же таблицами.Насколько я знаю, вся таблица MyISAM заблокирована для каждого запроса, что означает, что параллельные независимые запросы будут медленными.В идеале я бы предпочел двигатель с поддержкой «NO LOCKING».Я предполагаю, что MySQL не имеет такого движка, поэтому я должен использовать InnoDB?Я мог бы пропустить много вещей здесь.Пожалуйста, предложите, какой правильный путь выбрать здесь.

Спасибо

Ответы [ 2 ]

1 голос
/ 21 апреля 2010

Вы можете придерживаться MyISAM и использовать INSERT DELAYED:

Когда клиент использует INSERT DELAYED, он сразу получает одобрение от сервера, и строка ставится в очередь для вставки, когда таблица не используется каким-либо другим потоком.

Еще одним важным преимуществом использования INSERT DELAYED является то, что вставки от многих клиентов объединяются и записываются в один блок. Это намного быстрее, чем выполнение множества отдельных вставок.

1 голос
/ 21 апреля 2010

MyISAM блокировки чтения совместимы, поэтому запросы SELECT не будут блокировать друг друга.

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

...