Pergunta

Parece que eu vou precisar transação com MySQL e não tenho idéia de como eu deveria gerenciar transações no MySQL com tabelas InnoDB / MyISAM mistos, Parece que foi uma grande confusão.

Você pode perguntar por que eu iria querer misturar as tabelas juntos ... o anwer é o desempenho. como muitos desenvolvedores têm notado, tabelas InnoDB geralmente têm mau desempenho, mas em troca dar maior nível de isolamento etc ...

Alguém tem algum conselho sobre este assunto?

Foi útil?

Solução

Eu acho que você está superestimando a diferença de desempenho entre MyISAM e InnoDB. MyISAM é mais rápido em Data Warehousing situações (como mesa cheia relatórios de verificação, etc ..), mas InnoDB pode realmente ser mais rápido em muitos casos com consultas OLTP normais.

InnoDB é mais difícil para sintonizar uma vez que tem mais botões, mas um sistema InnoDB devidamente sintonizado muitas vezes pode ter rendimento maior do que MyISAM devido a uma melhor bloqueio e melhor I / padrões S.

Outras dicas

Uma vez que você não pode ter transações em tabelas MyISAM, não estou certo de que o problema é real. Quaisquer dados que você precisa transações para deve estar em uma tabela InnoDB e gerenciar as transações usando qualquer biblioteca de acesso que você está usando ou com comandos SQL manuais.

Existem benefícios de desempenho definidas de usar exatamente um motor.

Um servidor ligado para um motor não será ligado para o outro - ambos exigem que você alocar uma quantidade substancial de memória RAM para seu uso exclusivo -. Portanto, você não pode dar a ambos uma quantidade ideal

Digamos que você tenha 8G de memória RAM em seu (obviamente 64 bits, mas ainda relativamente pequeno) servidor de banco de dados, você pode querer atribuir cerca de 3/4 do que para o seu cache de página InnoDB. Alternativamente, se você estiver usando MyISAM, você pode querer cerca de metade do que seja o seu key_buffer. Você não pode fazer as duas coisas.

Escolha um motor e usá-lo exclusivamente. Existem maneiras de contornar problemas de desempenho - a maioria deles não são fáceis embora (ou seja, eles exigem redesenhar sua estrutura de dados ou seu aplicativo)

.

A resposta curta é que não há suporte a transações em MyISAM. Se você iniciar uma transação, adicionar ou modificar dados em algumas tabelas InnoDB, adicionar ou modificar dados em uma tabela MyISAM, e então você tem que rollback, a alteração MyISAM não pode ser removido. Para apoiar motores mistos assim, a sua aplicação tem de saber que as mudanças para o que os dados são armazenados MyISAM acontece "fora" da transação.

Se precisar de transações para alguns processos, então isolar os dados que devem ser transaccionável e colocar todas que os dados no InnoDB.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top