Eu tenho uma tabela mysql com 150k linhas e faço atualizações regulares. Atualizações podem levar 1-3 segundos. Quais opções eu tenho para reduzir isso?

0

Eu tenho uma tabela (mysql) que tem 150k linhas. Durante o dia, há várias atualizações (1000s) que alteram um valor int para outro valor int (campo de conjunto de tabela de atualização =? Onde table.id =?). nada complicado na consulta UPDATE.

Mudar para algo como Mongo db seria mais rápido? O banco de dados recebe mais de 100 s (1000 s) mais leituras (seleções) do que essas gravações. Quais são minhas opções?

    
por slycat 23.02.2013 / 05:35

3 respostas

1

  • Olhe para ajustar o MySQL para a máquina. Fora do padrão, o MySQL usa figuras de memória muito conservadoras para que ele seja executado em todos os lugares, ele precisa ser ajustado antes de entrar em produção toda vez
  • Use ferramentas de análise, como EXPLAIN, para ver quantos índices a consulta está atingindo. Se você puder reduzir o número de índices que precisam ser modificados, isso aumentará seu desempenho de atualização
  • Existem maneiras de reconstruir ou otimizar os próprios índices

O banco de dados em movimento pode ser considerado, mas primeiro você quer entender o problema e atacar seus ganhos fáceis. Existem bancos de dados MySQL muito maiores do que o seu que funcionam confortavelmente, não é como se você tivesse atingido o limite da tecnologia em si. Como ocorre com a maioria dos problemas de desempenho - embora nem sempre seja a solução mais agradável, normalmente pode ser resolvido ajustando ou adicionando o cache.

    
por 23.02.2013 / 05:39
0

Você não forneceu muito contexto, então é difícil fornecer uma resposta, mas alguns pensamentos, que eu acredito quando combinados, devem lhe dar uma resposta

  • Existem várias otimizações para as atualizações. Entre outros, são suas tabelas indexadas adequadamente em table.id e você tem memória suficiente alocado para fazer o que você está tentando com eficiência? Você está usando "preparado" afirmações ? A otimização de banco de dados é um assunto enorme.

  • O Mongo db não é um banco de dados relacional, então faz sentido reescrever seu código para usar o Mongo ou você pode conseguir isso mais facilmente refatorando partes do seu código (talvez armazenando a linha de 150k como uma matriz na memória e simplesmente modificando essa matriz, periodicamente fazendo backup no disco ?????)

por 23.02.2013 / 05:44
0

Supondo que você otimizou sua consulta e a indexou corretamente.

você pode:

  1. jogue hardware adicional para diminuir o tempo
  2. tente encurtar a distância de conexão entre o responsável pela chamada de atualização e o banco de dados (supondo que eles não estejam na mesma caixa)
  3. preempção para armazenar em cache (se possível) a alteração de valores, se conhecida de antemão
por 21.08.2014 / 20:05