Wir planen die Entwicklung eines Tools zur Erfassung und Analyse von Netflow-Daten, von denen wir enorme Mengen sammeln. Jeden Tag erfassen wir ungefähr 1,4 Milliarden Flow-Datensätze, die im JSON-Format wie folgt aussehen würden:
{
"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"
}
Wir möchten in der Lage sein, den Datensatz schnell zu durchsuchen (weniger als 10 Sekunden), höchstwahrscheinlich über kurze Zeiträume (Intervalle von 10 bis 30 Minuten). Wir möchten auch den Großteil der Datenpunkte indizieren, damit wir jede einzelne schnell durchsuchen können. Wir möchten auch eine aktuelle Ansicht der Daten haben, wenn Suchen ausgeführt werden. Es wäre großartig, in der Open Source-Welt zu bleiben, aber wir sind nicht dagegen, proprietäre Lösungen für dieses Projekt zu suchen.
Die Idee ist, ungefähr einen Monat Daten zu speichern, was ungefähr 43,2 Milliarden Datensätzen entspricht. Eine grobe Schätzung, dass jeder Datensatz ungefähr 480 Datenbytes enthalten würde, würde ~ 18,7 Terabytes Daten in einem Monat entsprechen, und vielleicht dreimal so viel wie bei Indizes. Schließlich möchten wir die Kapazität dieses Systems erweitern, um Billionen von Datensätzen zu speichern.
Wir haben Couchbase, Cassandra und Mongodb (im Grunde genommen) als mögliche Kandidaten für dieses Projekt bewertet, jedoch schlägt jeder seine eigenen Herausforderungen vor. Mit couchbase wird die Indizierung in Intervallen und nicht während des Einfügens der Daten durchgeführt, sodass die Ansichten nicht auf dem neuesten Stand sind. Die Sekundärindizes von cassandra sind nicht sehr effizient bei der Rückgabe von Ergebnissen, da sie normalerweise das Scannen des gesamten Clusters nach Ergebnissen erfordern Es scheint weitaus schwieriger zu skalieren zu sein, da es Master / Slave / Sharded ist. Einige andere Kandidaten, die wir evaluieren möchten, sind elasticsearch, mysql (nicht sicher, ob dies überhaupt anwendbar ist) und einige spaltenorientierte relationale Datenbanken. Anregungen oder Erfahrungen aus der realen Welt wäre dankbar.