Pergunta

Eu sou um pouco novo para trabalhar com vários segmentos em um banco de dados (a maioria da minha carreira foi gasto no frontend).

Hoje eu tentei testar um aplicativo php simples que eu escrevi para armazenar valores em um banco de dados MySQL usando tabelas ISAM emulando transações usando travamento de tabela.

Eu só escreveu um post sobre o procedimento aqui:

Teste com JMeter

De meus resultados meu aplicativo php simples parece manter a integridade transacional intacta (como visto a partir dos dados em meus arquivos CSV sendo o mesmo que os dados que eu re-extraídos do banco de dados):

arquivos CSV:

csv alt para al csv alt para bl

Consulta de dados para ambos os usuários após JMeter Test Run:

alt  alt

Estou certo em minha suposição de que a integridade dos dados transacional está intacta?

Como você testar para concorrência?

Foi útil?

Solução

Por que não usar o InnoDB e obter o mesmo efeito sem bloqueios manual de mesa?

Além disso, o que você está protegendo? Considere dois usuários (Bill e Steve):

  1. Bill cargas registro de 1234
  2. Steve cargas registro de 1234
  3. Steve muda registro 1234 e submete
  4. Bill espera um pouco, em seguida, atualiza o registro obsoleto 1234 e sustenta. Estas mudanças clobber de Bill.
bloqueio

Table não oferece qualquer integridade de dados maior do que o bloqueio tabela MyISAM nativa. MyISAM vai nativamente bloquear os arquivos da tabela quando necessário à corrupção de dados parada.

Na verdade, a razão para usar InnoDB sobre MyISAM é que ele vai fazer bloqueio de linha em vez de bloqueio tabela. Ele também suporta transações. Várias atualizações para diferentes registros não irá bloquear uns aos outros e complexos atualizações para vários registros será bloqueado até que a transação seja concluída.

Você precisa considerar a possibilidade de que duas atualizações para o mesmo registro vai acontecer ao mesmo tempo para a sua aplicação. Se é provável, fecho de tabela / fila não bloqueia a segunda atualização, ela só adia-lo até que as conclui primeira atualização.

Editar

Pelo que me lembro, MyISAM tem um comportamento especial para inserções. Ela não precisa de bloquear a tabela em tudo para uma inserção, uma vez que está apenas acrescentando ao final da tabela. Isso pode não ser verdade para tabelas com índices únicos ou chaves primárias não-incremento automático.

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