Prática recomendada para armazenar dados de simulação hierárquica


13

TL, DR

Qual é a melhor prática aceita nos círculos científicos da computação para armazenar grandes quantidades de dados hierarquicamente estruturados? Por exemplo, o SQL não funciona bem com grandes matrizes esparsas. Existe uma boa ferramenta disponível para estruturar, armazenar e analisar esse tipo de dados? O que os caras do LHC usam?

Detalhes do caso de uso

Quero armazenar dados de simulações de proteínas de acordo com a seguinte hierarquia:

protein
  |__simulation conditions
  |____|__residues
  |____|____|__conformers
  |____|____|____|__atoms

Toda proteína deve estar ciente de cada um de seus resíduos, todo átomo deve conhecer as condições usadas para sua simulação etc. e vice-versa.

Originalmente, imaginei que um banco de dados relacional seria perfeito para esse aplicativo e, por isso, escrevi um programa usando python e sqlalchemey que armazena os dados em um banco de dados SQL. Na prática, no entanto, este programa não está funcionando tão bem.

O maior problema está no fato de que existe uma matriz N x N no nível de dados do conformador que armazena a energia potencial devido às interações em pares entre todos os possíveis pares de conformes. A maioria das entradas na matriz são zeros, então estou armazenando a matriz em uma tabela separada no banco de dados em um tipo de formato esparso, uma linha por entrada. Infelizmente, para uma simulação envolvendo vários milhares de conformes, a tabela em pares ainda termina com várias centenas de milhares de linhas e:

a) cria e consulta muito lentamente (horas)
b) ocupa uma ordem de magnitude mais espaço no disco rígido do que uma representação equivalente em texto sem formatação dos dados como uma matriz não esparsa
c) ocupa mais de dez gigabytes de memória quando a tabela é lida na memória

Meu objetivo final é armazenar dezenas de milhares de execuções (derivadas de milhares de proteínas sob várias dezenas de condições de simulação) no banco de dados para que todas possam ser analisadas juntas. Isso significaria que a tabela que representa as matrizes em pares provavelmente aumentaria para cerca de um bilhão de linhas. Atualmente, parece que vou precisar de um Cray ou outro monstro de memória compartilhada para executar uma única consulta nesse banco de dados.

Tenho melhores opções aqui? O que os caras do LHC usam?

Respostas:


12

Considere usar o formato de arquivo HDF5 . HDF5 é um formato hierárquico de armazenamento de dados com vários recursos interessantes:

  • armazenamento independente da plataforma: a biblioteca cuida de pouca / grande utilidade para você
  • layout hierárquico de conjuntos de dados: como um sistema de arquivos em um arquivo
  • armazenamento de matriz n-dimensional grande e expansível
  • tipos de conjuntos de dados misturados podem existir em um arquivo (por exemplo, números inteiros, flutuadores etc.)
  • compressão automática está disponível
  • armazenamento binário
  • E / S paralela

Existem interfaces C e Fortran, bem como wrappers Python ( h5py e pytables ). O MATLAB também pode ler HDF5. O HDF5 é bastante flexível, quase com falha, ou seja, não é " autoexplicativo ", daí a criação do XDMF .

Não sei exatamente o que você quer dizer com "condições usadas para sua simulação", mas se essas são apenas pequenas coleções de parâmetros, você pode armazená-las como atributos .


3
Os links bidirecionais no HDF5 são um pouco difíceis de manter. Como os formatos HDF5 estão a meio caminho de serem lançados, você também pode considerar manter os metadados em um banco de dados relacional e manter os dados mais pesados ​​em arquivos separados (HDF5, se desejar).
precisa

0

O uso de um banco de dados é excelente para ajudá-lo a organizar / encontrar dados de simulação (pesquisa por proteína, pesquisa por parâmetros de simulação). O banco de dados deve informar onde encontrar as informações relevantes no disco, onde eu imagino que é provável que seja melhor armazená-las por execução de simulação em qualquer tipo de arquivo mais conveniente para carregar para análise (personalizado ou de qualquer conjunto de simulação que você está usando).

Isso permitirá que você encontre rapidamente as simulações desejadas, além de oferecer a liberdade / desempenho do uso de matrizes esparsas ou de quaisquer ferramentas necessárias para realizar análises eficientes.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.