ฉันกำลังสร้างระบบที่โพลอุปกรณ์สำหรับข้อมูลเกี่ยวกับตัวชี้วัดที่แตกต่างกันเช่นการใช้งาน CPU, การใช้ดิสก์, อุณหภูมิ ฯลฯ ที่ (อาจ) 5 นาทีโดยใช้ SNMP เป้าหมายสูงสุดคือการแสดงภาพให้กับผู้ใช้ระบบในรูปแบบของกราฟอนุกรมเวลา
ฉันเคยดูการใช้ RRDTool ในอดีต แต่ปฏิเสธว่าเป็นการเก็บข้อมูลที่ถูกบันทึกไว้โดยไม่มีกำหนดซึ่งมีความสำคัญต่อโครงการของฉันและฉันต้องการระดับที่สูงขึ้นและการเข้าถึงข้อมูลที่บันทึกได้อย่างยืดหยุ่นมากขึ้น ดังนั้นคำถามของฉันคือ:
สิ่งที่ดีกว่าคือฐานข้อมูลเชิงสัมพันธ์ (เช่น MySQL หรือ PostgreSQL) หรือฐานข้อมูลที่ไม่ใช่เชิงสัมพันธ์หรือฐานข้อมูล NoSQL (เช่น MongoDB หรือ Redis) เกี่ยวกับประสิทธิภาพเมื่อทำการสอบถามข้อมูลเพื่อสร้างกราฟ
สัมพันธ์
ให้ฐานข้อมูลเชิงสัมพันธ์ฉันจะใช้data_instances
ตารางซึ่งจะถูกเก็บไว้ทุกตัวอย่างของข้อมูลที่ถูกจับสำหรับทุกการวัดที่ถูกวัดสำหรับอุปกรณ์ทั้งหมดโดยมีฟิลด์ต่อไปนี้:
ทุ่ง: id
fk_to_device
fk_to_metric
metric_value
timestamp
เมื่อฉันต้องการวาดกราฟสำหรับตัวชี้วัดที่เฉพาะเจาะจงในอุปกรณ์ใดตัวหนึ่งฉันต้องสอบถามตารางเอกพจน์นี้เพื่อกรองอุปกรณ์อื่น ๆ และตัวชี้วัดอื่น ๆ ที่วิเคราะห์สำหรับอุปกรณ์นี้:
SELECT metric_value, timestamp FROM data_instances
WHERE fk_to_device=1 AND fk_to_metric=2
จำนวนแถวในตารางนี้จะเป็น:
d * m_d * f * t
ที่d
เป็นจำนวนของอุปกรณ์ , m_d
เป็นสะสมจำนวนตัวชี้วัดที่ถูกบันทึกไว้สำหรับอุปกรณ์ทั้งหมดf
เป็นความถี่ที่ข้อมูลจะถูกถึงขนาดและt
เป็นจำนวนเงินรวมของเวลาที่ระบบได้รับการเก็บรวบรวมข้อมูล
สำหรับผู้ใช้ที่บันทึก 10 ตัวชี้วัดสำหรับ 3 อุปกรณ์ทุก ๆ 5 นาทีเป็นเวลาหนึ่งปีเราจะมีระเบียนน้อยกว่า5 ล้านรายการ
ดัชนี
หากไม่มีดัชนีfk_to_device
และfk_to_metric
สแกนตารางที่ขยายอย่างต่อเนื่องนี้จะใช้เวลานานเกินไป ดังนั้นการจัดทำดัชนีฟิลด์ดังกล่าวและtimestamp
(สำหรับการสร้างกราฟที่มีช่วงเวลาที่แปลเป็นภาษาท้องถิ่น) จึงเป็นข้อกำหนด
ไม่ใช่เชิงสัมพันธ์ (NoSQL)
MongoDB มีแนวคิดของคอลเลกชันซึ่งแตกต่างจากตารางเหล่านี้สามารถสร้างโดยทางโปรแกรมโดยไม่ต้องติดตั้ง ด้วยสิ่งเหล่านี้ฉันสามารถแบ่งการจัดเก็บข้อมูลสำหรับแต่ละอุปกรณ์หรือแม้กระทั่งแต่ละเมตริกที่บันทึกไว้สำหรับแต่ละอุปกรณ์
ฉันไม่มีประสบการณ์กับ NoSQL และไม่ทราบว่าพวกเขามีคุณสมบัติการเพิ่มประสิทธิภาพการสืบค้นใด ๆ เช่นการจัดทำดัชนีอย่างไรก็ตามย่อหน้าก่อนหน้าเสนอให้ทำแบบสอบถามเชิงสัมพันธ์แบบดั้งเดิมส่วนใหญ่ทำงานในโครงสร้างซึ่งข้อมูลถูกเก็บไว้ภายใต้ NoSQL
ลังเล
โซลูชันเชิงสัมพันธ์ที่มีการจัดทำดัชนีที่ถูกต้องจะลดลงเป็นการรวบรวมข้อมูลภายในปีหรือไม่ หรือโครงสร้างตามการรวบรวมของแนวทาง NoSQL (ซึ่งตรงกับแบบจำลองจิตของฉันของข้อมูลที่เก็บไว้) ให้ประโยชน์ที่เห็นได้ชัดเจน?