私たちは、膨大な量を収集するnetflowデータをキャプチャして分析するツールの開発を検討しています。毎日約14億のフローレコードをキャプチャします。これは、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"
}
データセットの高速検索(10秒未満)を実行できるようにしたいと考えています。ほとんどの場合、時間の短いスライス(10〜30分間隔)で実行できます。また、データポイントの大部分にインデックスを付けて、各ポイントをすばやく検索できるようにします。また、検索が実行されたときにデータの最新のビューを取得したいと思います。オープンソースの世界にとどまることは素晴らしいことですが、このプロジェクトのプロプライエタリなソリューションを検討することに反対するわけではありません。
アイデアは、約1か月分のデータを保持することです。これは、約432億レコードになります。各レコードに約480バイトのデータが含まれるというおおよその見積もりは、1か月で最大18.7テラバイトのデータに相当し、インデックスを使用した場合の3倍になります。最終的には、このシステムの容量を増やして、何兆ものレコードを保存したいと考えています。
このプロジェクトの候補として、Couchbase、cassandra、mongodbを(非常に基本的に)評価しましたが、それぞれが独自の課題を提案しています。couchbaseでは、データの挿入中ではなく間隔でインデックス付けが行われるため、ビューは最新ではありません。結果を返すには、cassandraのセカンダリインデックスはあまり効率的ではありません。マスター/スレーブ/シャードであるため、スケーリングがはるかに難しいようです。評価を予定している他の候補には、elasticsearch、mysql(これが適用可能かどうかわからない)、およびいくつかの列指向のリレーショナルデータベースがあります。任意の提案や現実世界の経験をいただければ幸いです。