我们正在研究开发一种捕获和分析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分钟的间隔)。我们还希望对大多数数据点建立索引,以便我们可以快速搜索每个数据点。我们还希望在执行搜索时具有最新的数据视图。留在开源世界中将是很棒的,但是我们并不反对为该项目寻找专有的解决方案。
想法是保留大约一个月的数据,即约432亿条记录。粗略估计,每条记录将包含约480字节的数据,相当于一个月内约18.7 TB的数据,可能是索引的三倍。最终,我们希望提高该系统存储万亿记录的能力。
到目前为止,我们已经(非常基本)评估了长沙发,cassandra和mongodb的候选人,但是每个人都提出了自己的挑战。使用couchbase时,索引是每隔一段时间而不是在数据插入期间完成的,因此视图不是最新的,cassandra的二级索引返回结果的效率不是很高,因为它们通常需要扫描整个集群以获取结果,而mongodb看起来很有希望,但由于它是主/从/分片的,因此似乎很难扩展。我们计划评估的其他一些候选对象是elasticsearch,mysql(不确定这是否适用)和一些面向列的关系数据库。任何建议或现实世界的经验将不胜感激。