Estamos pensando em desenvolver uma ferramenta para capturar e analisar dados de fluxo de rede, dos quais coletamos enormes quantidades de. A cada dia, capturamos cerca de 1,4 bilhão de registros de fluxo, com a seguinte aparência no formato json:
{
"tcp_flags": "0",
"src_as": "54321",
"nexthop": "1.2.3.4",
"unix_secs": "1352234521",
"src_mask": "23",
"tos": "0",
"prot": "6",
"input": "105",
"doctets": "186",
"engine_type": "0",
"exaddr": "2.3.4.5",
"engine_id": "2",
"srcaddr": "9.8.7.6",
"dst_as": "12345",
"unix_nsecs": "752265174",
"sysuptime": "2943529544",
"dst_mask": "24",
"dstport": "80",
"last": "2943523241",
"srcport": "52672",
"dpkts": "4",
"output": "111",
"dstaddr": "6.5.4.3",
"first": "2943517993"
}
Gostaríamos de poder fazer pesquisas rápidas (menos de 10 segundos) no conjunto de dados, provavelmente em períodos de tempo mais estreitos (intervalos de 10 a 30 m). Também queremos indexar a maioria dos pontos de dados para que possamos fazer pesquisas rapidamente em cada um deles. Também gostaríamos de ter uma visualização atualizada dos dados quando as pesquisas são executadas. Seria ótimo permanecer no mundo do código aberto, mas não nos opomos a procurar soluções proprietárias para este projeto.
A idéia é manter aproximadamente um mês de dados, o que equivaleria a 43,2 bilhões de registros. Uma estimativa aproximada de que cada registro conteria cerca de 480 bytes de dados, equivaleria a ~ 18,7 terabytes de dados em um mês, e talvez três vezes isso com índices. Eventualmente, gostaríamos de aumentar a capacidade desse sistema para armazenar trilhões de registros.
Avaliamos (basicamente) o couchbase, cassandra e mongodb na medida do possível candidato a esse projeto, no entanto, cada um propõe seus próprios desafios. Com o couchbase, a indexação é feita em intervalos e não durante a inserção dos dados, para que as visualizações não estejam atualizadas, os índices secundários do cassandra não são muito eficientes no retorno de resultados, pois normalmente exigem a varredura de todo o cluster em busca de resultados, e o mongodb parece promissor, mas parece ser muito mais difícil de escalar, pois é mestre / escravo / fragmentado. Alguns outros candidatos que planejamos avaliar são elasticsearch, mysql (não tenho certeza se isso é aplicável) e alguns bancos de dados relacionais orientados a colunas. Qualquer sugestão ou experiência do mundo real seria apreciada.