ฉันได้รับมอบหมายให้ใช้โซลูชัน (แอพและฐานข้อมูล) เพื่อเก็บตัวอย่างข้อมูลจากอาร์เรย์เซ็นเซอร์ขนาดใหญ่ อาร์เรย์ในปัจจุบันประกอบด้วยเซ็นเซอร์ประมาณ 20,000 ตัว แต่ในไม่ช้าจะมีการเติบโตสูงถึง 100,000 เซ็นเซอร์ เซ็นเซอร์แต่ละตัวจะส่งตัวอย่างข้อมูลทุก ๆ 10 วินาทีและแต่ละตัวอย่างมีขนาด 28 ไบต์
การทำผลรวมจึงนำไปสู่:
- 8640 ตัวอย่างต่อเซ็นเซอร์ต่อวัน
- ข้อมูล 242kB ต่อเซ็นเซอร์ต่อวัน
- 864 ล้านตัวอย่างต่อวัน
ตอนนี้ฉันสงสัยว่าวิธีที่ดีที่สุดในการจัดเก็บ / ดึงข้อมูลคืออะไร? ฉัน "เข้าร่วม" โครงการนี้หลังจากที่ซอฟต์แวร์ได้ถูกระบุไว้แล้วดังนั้นจึงต้องดำเนินการบนแพลตฟอร์ม Windows โดยใช้ SQL Server
โซลูชันปัจจุบันในหัวของฉันคือการสร้างฐานข้อมูลที่มีสองตารางเพื่อเก็บตัวอย่างข้อมูล ตัวแรกทำหน้าที่จัดเรียงของดัชนีเป็นวินาทีที่เก็บตัวอย่างที่เรียงไว้ในเขตข้อมูลไบนารีในแต่ละวันต่อเซ็นเซอร์พื้นฐาน:
Table 1:
RecordID - BigInt - Identity
SensorID - BigInt - Primary Key
Date - DateTime - Primary Key (yyyy-mm-dd)
Table 2:
RecordID - BigInt - Primary Key (from an insert into Table 1)
Data - Binary
โดยทั่วไปฉันจะเขียนตัวอย่างจากเซ็นเซอร์ทั้งหมดเป็นไฟล์ชั่วคราว (1 ต่อเซ็นเซอร์) ในตอนท้ายของแต่ละวันฉันจะสร้างรายการในตารางที่ 1 ใช้ RecordID ที่สร้างขึ้นและดัมพ์ไฟล์ลงในฟิลด์ Data ในตารางที่ 2
ด้วยวิธีนี้ฉันมีเพียง 100,000 รายการลงในตารางต่อวันแทนที่จะเป็น 864 ล้านรายการ ข้อมูลควรมีอยู่ใน LAN หรือ WAN ความเร็วสูงดังนั้นการดึงข้อมูลเซ็นเซอร์ตลอดทั้งวันจึงเป็นที่ยอมรับได้
แม้ว่าข้อมูลทั้งหมดจะต้องถูกเก็บไว้ แต่ส่วนใหญ่ก็อาจจะไม่เคยอ่าน ดังนั้นจำนวนการอ่านบนโต๊ะจะไม่มากไปกว่าการเขียน
ฉันรู้ว่าฉันสามารถใช้บางสิ่งบางอย่างโดยใช้ระบบไฟล์โดยเพียงแค่เก็บเส้นทางไปยังไฟล์ข้อมูล แต่ฉันอ่านว่า SQL Server มีประสิทธิภาพดีกว่า NTFS ในขณะที่เขตข้อมูลไบนารีของคุณน้อยกว่าขอบคุณ 256kB (พื้นที่สีเทาอยู่ระหว่าง 256kB ถึง 1MB ในขณะที่ NTFS มีประสิทธิภาพเหนือกว่า SQL Server สำหรับขนาดไบนารี> 1 MB)
ฉันยังระมัดระวังในการจัดเก็บข้อมูลจากเซ็นเซอร์ 100,000 ตัวลงในไฟล์ของตนเองโดยไม่ทำให้เกิดปัญหาในระบบไฟล์โดยอาจมีไฟล์จำนวนมากในโฟลเดอร์หรือโดยมีโครงสร้างต้นไม้ที่ซับซ้อนพร้อมด้วยไฟล์จำนวนเล็กน้อยในแต่ละโฟลเดอร์ แม้จะคำนึงถึงการแตกไฟล์
ใครสามารถให้คำแนะนำ / ความคิดเห็นที่เป็นประโยชน์กับฉันได้บ้าง
มีข้อผิดพลาดที่เห็นได้ชัดว่าฉันกำลังจะตกอยู่ใน?
ข้อมูลตัวอย่างทำการบีบอัดได้ค่อนข้างดี ไฟล์ 242 kB บีบอัดได้ถึงประมาณ 85kB อย่างไรก็ตามฉันสามารถใช้การบีบอัดบางชนิดในระดับฐานข้อมูลเพื่อให้ข้อมูลตัวอย่าง (คอลัมน์) ถูกบีบอัดโดยอัตโนมัติได้หรือไม่
SQL Server เป็นตัวเลือกที่ผิดอย่างชัดเจนสำหรับโครงการนี้หรือไม่?
การออกแบบของฉันของทั้งสองตารางนั้นชาญฉลาดหรือฉันอาจรวมมันเข้ากับตารางเดียวที่จะยังคงเป็น "นักแสดง" เหมือนสองตารางได้หรือไม่?