Chcemy opracować narzędzie do przechwytywania i analizy danych przepływu netto, z których zbieramy ogromne ilości. Każdego dnia rejestrujemy około ~ 1,4 miliarda rekordów przepływu, które wyglądałyby tak w formacie 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"
}
Chcielibyśmy mieć możliwość szybkiego wyszukiwania (mniej niż 10 sekund) zestawu danych, najprawdopodobniej w wąskich przedziałach czasu (10-30 interwałów miętowych). Chcemy również zindeksować większość punktów danych, abyśmy mogli szybko wyszukać każdy z nich. Chcielibyśmy również mieć aktualny widok danych podczas wyszukiwania. Byłoby wspaniale pozostać w świecie open source, ale nie jesteśmy przeciwni szukaniu autorskich rozwiązań dla tego projektu.
Chodzi o to, aby przechowywać około jednego miesiąca danych, co stanowi ~ 43,2 miliarda rekordów. Z grubsza szacuje się, że każdy rekord zawiera około 480 bajtów danych, co odpowiada około 18,7 terabajtom danych w ciągu miesiąca, a może trzy razy więcej niż w przypadku indeksów. W końcu chcielibyśmy zwiększyć pojemność tego systemu do przechowywania bilionów rekordów.
Oceniliśmy (bardzo zasadniczo) bazę kanapy, cassandrę i mongodb, na ile to możliwe, kandydatów do tego projektu, jednak każdy z nich proponuje własne wyzwania. W przypadku bazy danych indeksowanie odbywa się w odstępach czasu, a nie podczas wstawiania danych, więc widoki nie są aktualne, wtórne indeksy Cassandry nie są bardzo skuteczne w zwracaniu wyników, ponieważ zwykle wymagają skanowania całego klastra w poszukiwaniu wyników, a mongodb wygląda obiecująco, ale wydaje się o wiele trudniejsze do skalowania, ponieważ jest to master / slave / shaged. Niektóre inne kandydatury, które planujemy ocenić, to elasticsearch, mysql (nie jestem pewien, czy to w ogóle ma zastosowanie) i kilka relacyjnych baz danych zorientowanych na kolumny. Będziemy wdzięczni za wszelkie sugestie lub doświadczenia z prawdziwego świata.