บริการของฉันมีกิจกรรมของผู้ใช้จำนวนมากอย่างต่อเนื่องและเราต้องการทำสิ่งต่าง ๆ เช่น "การนับเหตุการณ์ประเภทTตั้งแต่วันที่D "
เรากำลังพยายามตัดสินใจขั้นพื้นฐานสองประการ:
จะเก็บอะไรดี? การจัดเก็บทุกเหตุการณ์เทียบกับการจัดเก็บมวลรวมเท่านั้น
- (สไตล์บันทึกเหตุการณ์) บันทึกทุกเหตุการณ์และนับในภายหลังกับ
- (สไตล์อนุกรมเวลา) จัดเก็บ "การนับเหตุการณ์อีสำหรับวันที่D " ที่รวบรวมไว้ทุกวัน
จะเก็บข้อมูลที่ไหน
- ในฐานข้อมูลเชิงสัมพันธ์ (โดยเฉพาะ MySQL)
- ในฐานข้อมูลที่ไม่ใช่เชิงสัมพันธ์ (NoSQL)
- ในไฟล์บันทึกการทำงานแบบแบน (รวบรวมจากส่วนกลางผ่านเครือข่ายผ่านทาง
syslog-ng
)
มาตรฐานการปฏิบัติคืออะไรที่ฉันสามารถอ่านเพิ่มเติมเกี่ยวกับการเปรียบเทียบระบบประเภทต่าง ๆ ได้
รายละเอียดเพิ่มเติม:
- สตรีมเหตุการณ์ทั้งหมดมีขนาดใหญ่อาจมีหลายแสนรายการต่อวัน
- แต่ความต้องการในปัจจุบันของเราเพียงเพื่อนับเหตุการณ์บางประเภทที่อยู่ภายใน
- เราไม่จำเป็นต้องเข้าถึงข้อมูลดิบหรือผลการรวบรวมแบบเรียลไทม์
IMHO "บันทึกเหตุการณ์ทั้งหมดไปยังไฟล์รวบรวมข้อมูลในภายหลังเพื่อกรองและรวมสตรีม" เป็นวิธีมาตรฐาน UNIX ที่สวยงาม แต่เพื่อนร่วมทาง Rails-y ของฉันดูเหมือนจะคิดว่าไม่มีอะไรจริงเว้นแต่ว่ามันจะอยู่ใน MySQL
SELECT...GROUP BY
สามารถจัดเก็บผลลัพธ์ของSELECT
2) โดยใช้Graphiteสำหรับการรวมและการมองเห็นขนาดใหญ่แบบง่ายและ 3) การบันทึกเหตุการณ์เต็มรูปแบบสำหรับการอ้างอิงและดูรายละเอียดของการไหลของข้อมูลในเวลาจริง แต่ละอันมีคุณค่าแตกต่างกันไป