Stiamo cercando di sviluppare uno strumento per acquisire e analizzare i dati del flusso di rete, di cui raccogliamo enormi quantità. Ogni giorno acquisiamo circa 1,4 miliardi di registrazioni di flusso che sarebbero così in 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"
}
Vorremmo essere in grado di eseguire ricerche rapide (meno di 10 secondi) sul set di dati, molto probabilmente su intervalli di tempo ristretti (intervalli di 10-30 minuti). Vogliamo anche indicizzare la maggior parte dei punti dati in modo da poter effettuare rapidamente ricerche su ciascuno di essi. Vorremmo anche avere una vista aggiornata dei dati quando vengono eseguite le ricerche. Sarebbe bello rimanere nel mondo open source, ma non siamo contrari a cercare soluzioni proprietarie per questo progetto.
L'idea è di conservare circa un mese di dati, che sarebbero circa 43,2 miliardi di record. Una stima approssimativa che ogni record conterrebbe circa 480 byte di dati, equivarrebbe a ~ 18,7 terabyte di dati in un mese, e forse tre volte rispetto agli indici. Alla fine vorremmo aumentare la capacità di questo sistema di archiviare trilioni di record.
Abbiamo valutato (in sostanza) couchbase, cassandra e mongodb per quanto possibile candidati a questo progetto, tuttavia ognuno propone le proprie sfide. Con couchbase l'indicizzazione viene eseguita a intervalli e non durante l'inserimento dei dati, quindi le viste non sono aggiornate, gli indici secondari di cassandra non sono molto efficienti nel restituire i risultati poiché in genere richiedono la scansione dell'intero cluster per risultati e mongodb sembra promettente ma sembra essere molto più difficile da ridimensionare in quanto è master / slave / sharded. Alcuni altri candidati che intendiamo valutare sono elasticsearch, mysql (non sono sicuro che ciò sia applicabile) e alcuni database relazionali orientati alle colonne. Qualsiasi suggerimento o esperienza nel mondo reale sarebbe apprezzato.