我们正在研究开发一种捕获和分析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太字节的数据,可能是索引的三倍.最终,我们希望增加此系统的容量来存储数万亿条记录.
我们(非常基本上)已经对这个项目的候选人进行了评估,但是每个人都提出了自己的挑战.使用couchbase时,索引是按时间间隔完成的,而不是在插入数据期间,因此视图不是最新的,cassandra的二级索引在返回结果时效率不高,因为它们通常需要扫描整个集群以获得结果,而mongodb看起来很有希望但是由于它是主/从/分片,因此看起来更难以扩展.我们计划评估的其他一些候选者是elasticsearch,MysqL(不确定这是否适用),以及一些面向列的关系数据库.任何建议或现实世界的经验将不胜感激.