Поддержка транзакций MySQL со смешанными таблицами - PullRequest
0 голосов
/ 01 января 2009

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

Вы могли бы спросить, зачем мне когда-нибудь смешивать столы ... Ответ - ПРОИЗВОДИТЕЛЬНОСТЬ. как заметили многие разработчики, таблицы InnoDB обычно имеют плохую производительность, но, в свою очередь, дают более высокий уровень изоляции и т. д. *

Кто-нибудь есть какие-либо советы по этому вопросу?

Ответы [ 4 ]

6 голосов
/ 01 января 2009

Я думаю, вы переоцениваете разницу в производительности между MyISAM и InnoDB. MyISAM работает быстрее в ситуациях с хранилищем данных (таких как отчеты о сканировании полной таблицы и т. Д.), Но InnoDB во многих случаях может работать быстрее при обычных запросах OLTP.

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

2 голосов
/ 01 января 2009

Учитывая, что у вас не может быть транзакций в таблицах MyISAM, я не уверен, в чем именно заключается проблема. Любые данные, для которых вам нужны транзакции, должны находиться в таблице InnoDB, и вы управляете транзакциями, используя любую библиотеку доступа, которую используете, или с помощью ручных команд SQL.

0 голосов
/ 30 апреля 2009

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

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

0 голосов
/ 07 января 2009

Существуют определенные преимущества в производительности при использовании ровно одного двигателя.

Сервер, настроенный на один движок, не будет настроен на другой - оба требуют, чтобы вы выделяли значительный объем ОЗУ для его эксклюзивного использования - поэтому вы не можете дать им обоим оптимальный объем.

Скажем, у вас есть 8 ГБ оперативной памяти на вашем (очевидно, 64-битном, но все еще относительно небольшом) сервере баз данных, вы можете назначить около 3/4 его для своего кэша страниц innodb. В качестве альтернативы, если вы используете MyISAM, вы можете захотеть, чтобы около половины его было вашим key_buffer. Вы не можете сделать оба.

Выберите двигатель и используйте его исключительно. Существуют способы обойти проблемы с производительностью, но большинство из них нелегкие (т. Е. Они требуют изменения структуры данных или приложения).

...