ฉันต้องการจัดเก็บและสามารถสืบค้นข้อมูลอนุกรมเวลาจำนวนมากได้
คุณสมบัติของข้อมูลมีดังนี้:
- จำนวนซีรีส์: ประมาณ 12.000 (หนึ่งหมื่นสองพัน)
- จำนวนจุดข้อมูลทั่วโลก: ประมาณ 500,000 ต่อเดือน (ห้าร้อยล้าน)
- ประเภทค่าผสม: จุดข้อมูลส่วนใหญ่เป็นค่าจุดลอยตัวส่วนที่เหลือเป็นสตริง
- ระยะเวลาการสุ่มตัวอย่าง: ตัวแปรระหว่างซีรี่ส์และภายในซีรี่ส์
- การประทับเวลา: ความแม่นยำมิลลิวินาที
- ระยะเวลาการเก็บข้อมูล: หลายปีโดยไม่มีการลดลงหรือการสุ่มตัวอย่าง
- คลังข้อมูลจะต้องถูกสร้างขึ้นในแบบเรียลไทม์ แต่มีความล่าช้าพอสมควร (~ 1 ชั่วโมง) เป็นที่ยอมรับ
- ข้อมูลที่ผ่านมาสามารถสร้างใหม่ได้ถ้าต้องการ แต่มีค่าใช้จ่ายสูง
- บางครั้ง แต่ค่อนข้างน้อยข้อมูลในอดีตบางอย่างจำเป็นต้องได้รับการอัปเดต
คุณสมบัติของข้อความค้นหาที่จินตนาการ:
- ข้อความค้นหาส่วนใหญ่ที่มีข้อมูลจะเป็นแบบสอบถามแบบอิงตามเวลา ตั้งแต่วันหนึ่งถึงหลายเดือน / ปี 90% + จะสอบถามเกี่ยวกับข้อมูลล่าสุด
ข้อกำหนดอื่น ๆ :
- การแก้ปัญหาจะต้องเป็นฟรีในเบียร์ฟรีและโอเพนซอร์สโดยเฉพาะอย่างยิ่ง
ความคิดเริ่มต้นของฉันคือการใช้ PyTables / Pandas กับไฟล์ HDF5เพื่อเก็บแบ็คเอนด์แทนฐานข้อมูล SQL
คำถาม:
สมมติว่า PyTables / Pandas เป็นเส้นทางที่ "ดีที่สุด" มันจะดีกว่าไหมถ้าจะแบ่งข้อมูลออกเป็นไฟล์ HDF หลาย ๆ ไฟล์แต่ละอันครอบคลุมช่วงเวลาที่กำหนดหรือวางทุกอย่างไว้ในไฟล์เดียวที่จะกลายเป็นเรื่องใหญ่?
ฉันควรไปและชอบรูปแบบคงที่หรือรูปแบบตารางหรือไม่ สำหรับฉันแล้วรูปแบบคงที่นั้นใช้ได้ถ้าฉันเก็บไฟล์ HDF หนึ่งไฟล์ต่อเดือนเพราะวิธีนี้ทั้งซีรีย์น่าจะเหมาะกับ RAM และฉันสามารถแบ่งหน่วยความจำในหน่วยความจำได้โดยไม่ต้องใช้ดัชนีรูปแบบตาราง ฉันถูกไหม ?
และถ้านั่นไม่ใช่วิธีที่ดีที่สุดฉันควรจัดโครงสร้างที่เก็บข้อมูลนี้หรือเทคโนโลยีใดที่ฉันควรพิจารณา ฉันไม่ใช่คนแรกที่จัดการเก็บข้อมูลอนุกรมเวลาจำนวนมากวิธีการทั่วไปในการแก้ไขปัญหานี้คืออะไร
วิธีการอื่นที่ฉันได้พิจารณา:
- ฐานข้อมูลอาเรย์: เหมาะอย่างยิ่งสำหรับอนุกรมเวลาที่มีช่วงเวลาการสุ่มตัวอย่างคงที่เนื่องจากคุณจะต้องเก็บเวลาเริ่มต้นและเวลาสิ้นสุดและช่วงเวลาการสุ่มตัวอย่างของอาเรย์เท่านั้น แต่ด้วยช่วงเวลาการสุ่มตัวอย่างตัวแปรภายในชุดตัวเองฉันจำเป็นต้องรักษาความสัมพันธ์ของการประทับเวลา -> ค่าที่ใกล้ชิดว่าในมุมมองของฉันไม่เหมาะสำหรับ DBMS อาร์เรย์
- ฐานข้อมูล SQL มาตรฐานที่มีการประทับเวลา, paramID, ค่าเป็นคอลัมน์ แต่โดยธรรมชาติแล้วพวกเขาร้องขอ disk I / O จำนวนมากสำหรับการสืบค้นใด ๆ