Pergunta

Atualmente estou trabalhando em um problema que envolve consultando uma enorme quantidade de dados (bilhões de linhas) e, sendo um pouco inexperiente com esse tipo de coisa, adoraria alguns conselhos inteligente.

Os olhares de dados / problema como este:

  1. Cada mesa tem 2-5 colunas de chave e 1 coluna de valor.
  2. Cada linha tem uma combinação única de chaves.
  3. Eu preciso ser capaz de consulta por qualquer subconjunto de chaves (ou seja key1 = 'blá' e key4 = 'bloo').
  4. Seria bom para poder rapidamente inserir novas linhas (atualização do valor se a linha já existe), mas eu ficaria satisfeito se eu poderia fazer isso lentamente.

Atualmente tenho esta implementado em MySQL rodando em uma única máquina com índices separados definidos em cada tecla, um índice em todas as chaves (originais) e um índice que combina a primeira ea última chaves (que é atualmente o mais consulta I comum' m fazendo, mas que poderia facilmente mudar). Infelizmente, isso é bastante lento (e os índices acabam tendo ~ 10x o espaço em disco, o que não é um problema enorme).

Acontece que eu tenho um bando de computadores rápidos à minha disposição (~ 40), o que torna a lentidão incrível deste banco de dados em uma única máquina ainda mais irritante. Quero tirar proveito de todo esse poder para fazer este rápido banco de dados. Eu considerei a construção de uma tabela hash distribuída, mas que tornaria difícil de consulta para apenas um subconjunto das chaves. Parece que algo como BigTable / HBase seria uma solução decente, mas eu ainda não estou convencido de que uma solução mais simples não existe.

Muito obrigado, qualquer ajuda seria muito apreciada!

Nenhuma solução correta

Outras dicas

Eu sugiro que você ouvir este podcast para alguns excelentes informações sobre bancos de dados distribuídos. episódio-109-ebays -architecture-princípios-com-randy-shoup ??

Para apontar o óbvio:. Você provavelmente disco obrigado

Em algum momento, se você está fazendo consultas randomish e seu conjunto de trabalho é suficientemente maior do que a RAM, então você vai ser limitada pelo pequeno número de IOPS aleatórios um disco pode fazer. Você não vai ser capaz de fazer melhor do que algumas dezenas de sub-consultas por segundo por disco conectado.

Se você está acima de encontro que gargalo, que você pode ganhar mais por mudar para um SSD, um RAID maior, ou lotes-de-RAM do que você faria com a distribuição de banco de dados entre vários computadores (que na maior parte apenas conseguir mais dos últimos dois recursos)

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