A resposta de Matt Sheppard é ótima (mod up), mas eu levaria em conta esses fatores ao pensar em um eixo-árvore:
- Estrutura: obviamente se quebra em pedaços ou você está fazendo trocas?
- Uso: como os dados serão analisados / recuperados / grokked?
- Tempo de vida: quanto tempo os dados são úteis?
- Tamanho: quantos dados existem?
Uma vantagem particular dos arquivos CSV sobre os RDBMSes é que eles podem ser fáceis de condensar e mover-se para praticamente qualquer outra máquina. Fazemos grandes transferências de dados, e tudo é simples o suficiente, apenas usamos um arquivo CSV grande e fácil de script usando ferramentas como rsync. Para reduzir a repetição em grandes arquivos CSV, você pode usar algo como YAML . Não tenho certeza se armazenaria algo como JSON ou XML, a menos que você tenha requisitos significativos de relacionamento.
Quanto às alternativas não mencionadas, não desconsidere o Hadoop , que é uma implementação de código aberto do MapReduce. Isso deve funcionar bem se você tiver uma tonelada de dados fracamente estruturados que precisam ser analisados e desejar estar em um cenário em que pode adicionar apenas mais 10 máquinas para lidar com o processamento de dados.
Por exemplo, comecei a tentar analisar o desempenho que era essencialmente todo o número de temporizações de diferentes funções registradas em torno de 20 máquinas. Depois de tentar colar tudo em um RDBMS, percebi que realmente não preciso consultar os dados novamente depois de agregá-los. E, só é útil em seu formato agregado para mim. Portanto, mantenho os arquivos de log por aí, compactados e deixo os dados agregados em um banco de dados.
Note que estou mais acostumado a pensar em tamanhos "grandes".