Mais de 1 bilhão de linhas em uma tabela MyISAM

6

A partir de sua experiência, qual é o limite superior de linhas em uma tabela MyISAM, o MySQL pode manipular eficientemente em um servidor com CPU Q9650 (4-core, 3.0G) e 8G RAM.

Atualmente, tenho uma tabela com 15 milhões de linhas. É bem rápido. Se a escala aumentar para 1 bilhão de linhas, eu preciso particioná-la em 10 tabelas com 100 milhões de linhas cada?

    
por jack 31.10.2009 / 09:40

4 respostas

15

Eu não me preocuparia com o desempenho do aplicativo com 1 bilhão de linhas em uma máquina que possa manter os índices na memória. Se você é sério em alcançar 1 bilhão de linhas, você primeiro tem que fazer um pouco de matemática:

  • Qual é o seu tamanho recorde e multiplique por 1 bilhão?
  • Em seguida, você precisa calcular o tamanho dos índices (mais de um índice, suponho) e adicioná-lo.
  • Você tem requisitos transacionais para os quais deseja ter bloqueio em nível de linha?
  • Esta é uma tabela com acréscimo de peso ou uma tabela de leitura pesada?

Em seguida, vá para os requisitos de tempo de atividade do seu aplicativo.

  • Como você vai fazer backup de linhas de 1B?
  • Como você lidará com uma tabela de linhas 1B corrompida?
  • Com que frequência você precisará executar uma OPTIMIZE TABLE?
  • Como você lidará com uma alteração de esquema contra uma tabela de linhas de 1B? (Adicionar um índice em uma tabela de 35 milhões de linhas em uma caixa dual core de 2 GB com ram de 2 GB me levou 45 minutos recentemente.)

Eu me preocuparia mais com o ciclo de vida dos dados e com o gerenciamento de dados de um arquivo de várias gigabytes dessa magnitude antes de me preocupar com o desempenho. Com a replicação, você pode obter muito do desempenho. Manter os dados são e restaurar até mesmo de pequenos desastres (como corrupção induzida por ram ruim) é mais provável que você vá incomodá-lo primeiro.

Eu também gostaria de incentivá-lo a pegar a tabela que você tem - e adicionar 1B linhas de dados de teste a ele. Isso é extremamente perspicaz para observar o que acontece com o seu sistema. Execute alguns EXPLAINs em suas consultas em relação a este novo conjunto de dados enorme. Tempo quanto tempo leva para fazer backup e restaurar. Pode ser necessário ajustar alguns requisitos.

Este é um artigo interessante cerca de 1 bilhão de linhas no mysql.

    
por 31.10.2009 / 11:04
2

Apenas para adicionar alguns dos comentários acima, eu tenho bilhões de tabelas antes em quad-xeons, embora com 32Gb de RAM, não apenas 8.

Para garantir que nosso desempenho seja bom, as tabelas são simplificadas e normalizadas o máximo possível para mantê-las mais finas e, em seguida, ter apenas alguns índices nelas. O ponto principal dessas tabelas, as realmente grandes, para mim, era apenas escrever dados de séries temporais. Muitas escritas, tudo em ordem e muito poucas leituras. As leituras que eram necessárias estavam sempre procurando por tempos específicos contra outra coluna ou 2, e assim o índice poderia cuidar disso.

As tabelas mantidas na SAN foram submetidas a backup automaticamente pelo SRDF e, na ocasião em que as coisas deram errado (disco cheio, etc), levou cerca de 4 horas para ser reparado.

    
por 02.11.2009 / 03:11
1

Depende das consultas que você está executando. Se você estiver fazendo SELECT * FROM table , ele geralmente será executado muito mais rápido que uma consulta com dez JOIN s.

    
por 31.10.2009 / 10:24
0

depende do seu hardware, dados, qual consulta você executa e o que você considera rápido. para consultas simples ( "select * from table where foo='bla'" ), o cálculo é fácil: se a sua consulta usar um índice e esse índice couber no buffer do sistema de arquivos do seu sistema operacional, será rápido. se não couber, a consulta é executada mais devagar (quanto mais lenta depende da quantidade de dados que o mysql precisa ler e da velocidade de seus discos)

no entanto, eu usaria um db compatível com ACID como o postgres com essas tabelas, você não quer reparar uma tabela com um bilhão de linhas

    
por 31.10.2009 / 11:05

Tags