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?