Pergunta

Eu tenho um projeto no qual estou fazendo dados de mineração de dados em um grande banco de dados. Atualmente, armazenei todos os dados em arquivos de texto, estou tentando entender os custos e benefícios de armazenar o banco de dados relacional de dados. Os pontos são assim:

CREATE TABLE data (
    source1 CHAR(5),
    source2 CHAR(5),
    idx11   INT,
    idx12   INT,
    idx21   INT,
    idx22   INT,
    point1  FLOAT,
    point2  FLOAT
);

Quantos pontos como esse posso ter com desempenho razoável? Atualmente, tenho ~ 150 milhões de pontos de dados e provavelmente não tenho mais de 300 milhões. Suponha que estou usando uma caixa com 4 CPUs Xeon de 2 GHz e 8 GB de RAM.

Foi útil?

Solução

O MySQL é mais do que capaz de atender às suas necessidades, bem como a sugestão de Alex de PostgreSQL. O desempenho razoável não deve ser difícil de alcançar, mas se a tabela for fortemente acessada e ter uma grande quantidade de DML, você desejará saber mais sobre o travamento usado pelo banco de dados que você acaba escolhendo.

Acredito que o PostgreSQL pode usar o bloqueio de nível de linha, onde o MySQL dependerá do mecanismo de armazenamento que você escolher. O Myisam apenas trava no nível da tabela e, portanto, a simultaneidade sofre, mas os mecanismos de armazenamento como o InnoDB para o MySQL podem e usará o bloqueio no nível da linha para aumentar a taxa de transferência. Minha sugestão seria começar com o Myisam e passar para o InnoDB apenas se você achar que precisar de bloqueio no nível da linha. Myisam funciona bem na maioria das situações e é extremamente leve. Eu tive mesas mais de 1 bilhão de linhas no MySQL usando o Myisam e com boa indexação e particionamento, você pode obter um ótimo desempenho. Você pode ler mais sobre os motores de armazenamento no MySQL emMotores de armazenamento MySQL e sobre a partição da mesa em Particionamento da tabela. Aqui está um artigo sobre Partições na prática em uma mesa de 113m linhas que você pode achar útil também.

Eu acho que os benefícios de armazenar os dados em um banco de dados relacionais superam em muito os custos. Há tantas coisas que você pode fazer assim que seus dados estiverem dentro de um banco de dados. Recuperação de pontos no tempo, garantindo a integridade dos dados, acesso mais refinado à segurança, particionamento de dados, disponibilidade para outros aplicativos por meio de um idioma comum. (SQL) etc. etc.

Boa sorte com seu projeto.

Outras dicas

PostGresql Deve ser capaz de acomodar amplamente seus dados - até 32 terabytes por tabela, etc. etc. Se eu entender corretamente, você está falando de 5 GB atualmente, 10 GB máx. (Cerca de 36 bytes/linha e até 300 milhões de linhas ), portanto, quase qualquer banco de dados deve de fato poder acomodá -lo com facilidade.

FYI: Postgres escala melhor do que o MySQL em solicitações multiprocessador / sobreposição, de uma revisão que eu estava lendo alguns meses atrás (desculpe, sem link).

Suponho que, do seu perfil, este é algum tipo de biométrico (seqüências de códon, sequência enzimática vs proteína aminoácidos, ou algo dessas dessas). Se você vai atacar isso com solicitações simultâneas, eu iria com o Postgres.

OTOH, se os dados forem carregados uma vez, depois digitalizados por um único thread, talvez o MySQL em seu modo "ácido não necessário" seja a melhor correspondência.

Você tem algum planejamento de fazer em caso de acesso a (s) casos (s) de uso (s) antes de selecionar a pilha "Melhor".

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