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 개월 분량의 데이터를 유지하는 것입니다. 약 443 억 개의 레코드입니다. 각 레코드가 약 480 바이트의 데이터를 포함 할 것으로 추정하면 대략 한 달에 ~ 18.7 테라 바이트의 데이터와 같으며 인덱스의 경우 3 배가됩니다. 결국 우리는이 시스템이 수조 개의 레코드를 저장하는 능력을 키우고 자합니다.
우리는 (거의 기본적으로)이 프로젝트의 가능한 후보까지 소파베이스, 카산드라 및 mongodb를 평가했지만 각자 고유 한 과제를 제안합니다. couchbase를 사용하면 인덱싱이 데이터를 삽입하는 동안이 아닌 간격으로 수행되므로 뷰가 최신 상태가 아니므로 cassandra의 보조 인덱스는 일반적으로 전체 클러스터를 스캔하여 결과를 검색해야하므로 결과를 반환하는 데 매우 효율적이지 않습니다. 마스터 / 슬레이브 / 샤드이므로 확장하기가 훨씬 어렵습니다. 우리가 평가할 다른 후보는 elasticsearch, mysql (이것이 적용 가능한지 확실하지 않음) 및 몇 가지 열 지향 관계형 데이터베이스입니다. 어떤 제안이나 실제 경험이 있으면 감사하겠습니다.