Kami sedang mengembangkan alat untuk menangkap dan menganalisis data netflow, yang kami kumpulkan dalam jumlah besar. Setiap hari kami menangkap sekitar ~ 1,4 miliar catatan aliran yang akan terlihat seperti ini dalam format 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"
}
Kami ingin dapat melakukan pencarian cepat (kurang dari 10 detik) pada kumpulan data, kemungkinan besar lebih dari irisan waktu yang sempit (interval 10 - 30 menit). Kami juga ingin mengindeks sebagian besar titik data sehingga kami dapat melakukan pencarian pada masing-masing dengan cepat. Kami juga ingin memiliki tampilan data terkini ketika pencarian dieksekusi. Akan sangat bagus untuk tetap berada di dunia open source, tetapi kami tidak menentang untuk mencari solusi eksklusif untuk proyek ini.
Idenya adalah untuk menyimpan sekitar satu bulan data, yang akan ~ 43,2 miliar catatan. Perkiraan kasar bahwa setiap catatan akan berisi sekitar 480 byte data, akan sama dengan ~ 18,7 terabyte data dalam sebulan, dan mungkin tiga kali lipat dari indeks. Akhirnya kami ingin meningkatkan kapasitas sistem ini untuk menyimpan triliunan catatan.
Kami telah (pada dasarnya) mengevaluasi couchbase, cassandra, dan mongodb sejauh mungkin menjadi kandidat untuk proyek ini, namun masing-masing mengusulkan tantangan mereka sendiri. Dengan couchbase, pengindeksan dilakukan pada interval dan tidak selama penyisipan data sehingga pandangan tidak up to date, indeks sekunder cassandra tidak sangat efisien dalam mengembalikan hasil karena mereka biasanya memerlukan pemindaian seluruh cluster untuk hasil, dan mongodb terlihat menjanjikan tetapi tampaknya jauh lebih sulit untuk skala karena master / slave / sharded. Beberapa kandidat lain yang kami rencanakan untuk dievaluasi adalah elasticsearch, mysql (tidak yakin apakah ini dapat diterapkan), dan beberapa basis data relasional yang berorientasi pada kolom. Setiap saran atau pengalaman dunia nyata akan dihargai.