เรากำลังมองหาการพัฒนาเครื่องมือในการจับและวิเคราะห์ข้อมูล netflow ซึ่งเราได้รวบรวมจำนวนมหาศาล ในแต่ละวันเราบันทึกเร็กคอร์ดกระแสประมาณ 1.4 พันล้านรายการซึ่งจะมีลักษณะเช่นนี้ในรูปแบบ 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 นาที) เราต้องการทำดัชนีจุดข้อมูลส่วนใหญ่เพื่อให้เราสามารถทำการค้นหาในแต่ละจุดได้อย่างรวดเร็ว นอกจากนี้เรายังต้องการดูข้อมูลล่าสุดเมื่อดำเนินการค้นหา มันจะเป็นการดีที่ได้อยู่ในโลกโอเพนซอร์ส แต่เราไม่ได้ต่อต้านการมองหาโซลูชันที่เป็นกรรมสิทธิ์สำหรับโครงการนี้
แนวคิดคือการเก็บข้อมูลประมาณหนึ่งเดือนซึ่งจะเป็นระเบียนประมาณ 43.2 พันล้านรายการ การประมาณการคร่าวๆว่าแต่ละเร็กคอร์ดจะมีข้อมูลประมาณ 480 ไบต์จะเท่ากับ ~ 18.7 เทราไบต์ของข้อมูลในหนึ่งเดือนและอาจเป็นสามเท่าของดัชนี ในที่สุดเราต้องการที่จะเพิ่มขีดความสามารถของระบบนี้เพื่อเก็บบันทึกนับล้าน ๆ รายการ
เรามีการประเมิน couchbase, Cassandra และ mongodb ให้มากที่สุดเท่าที่จะเป็นไปได้สำหรับผู้สมัครสำหรับโครงการนี้อย่างไรก็ตามแต่ละคนเสนอความท้าทายของตนเอง ด้วย couchbase การจัดทำดัชนีจะทำตามช่วงเวลาและไม่ใช่ระหว่างการแทรกข้อมูลดังนั้นมุมมองไม่ทันสมัยดัชนีรองของ Cassandra ไม่ได้มีประสิทธิภาพมากในการส่งคืนผลลัพธ์เนื่องจากโดยทั่วไปแล้วพวกเขาต้องการสแกนกลุ่มทั้งหมดเพื่อผลลัพธ์และ mongodb ดูมีแนวโน้ม แต่ ดูเหมือนว่าจะยากต่อการปรับขนาดเนื่องจากมันเป็น Master / Slave / Sharded ผู้สมัครอื่น ๆ ที่เราวางแผนจะประเมินคือ elasticsearch, mysql (ไม่แน่ใจว่ามันใช้งานได้จริง) และฐานข้อมูลเชิงสัมพันธ์เชิงคอลัมน์ ข้อเสนอแนะใด ๆ หรือประสบการณ์ในโลกแห่งความจริงจะได้รับการชื่นชม