ข้อมูลอนุกรมเวลาคืออะไร?
- ข้อมูลอนุกรมเวลาคือชุดของข้อมูลที่แต่ละจุดข้อมูลมีการประทับเวลาไว้
- ตัวอย่าง: ราคาหุ้น, ข้อมูลอุณหภูมิและความพร้อมใช้งานที่ส่งกลับจากอุปกรณ์และเซ็นเซอร์, ข้อมูลทราฟฟิกของเว็บไซต์
- งานด้านอนุกรมเวลามักรวมถึงคิวรีกรองตามเวลาและคิวรี aggregate เพื่อสรุปข้อมูล
งานด้านอนุกรมเวลาด้วย PostgreSQL
- PostgreSQL สามารถรองรับงานด้านข้อมูลได้ทุกประเภทด้วยความสามารถในการขยายและเครื่องมือใน ecosystem
- Tembo ตั้งเป้าให้ผู้ใช้สามารถใช้งาน ecosystem ของ PostgreSQL ได้อย่างง่ายดาย
- ความต้องการที่ใหญ่ที่สุดจากลูกค้าคือสแตกที่สามารถจัดเก็บและประมวลผลข้อมูลอนุกรมเวลาได้
องค์ประกอบของ pg_timeseries
- ข้อกำหนดสำหรับการจัดเก็บและคิวรีข้อมูลอนุกรมเวลาอย่างมีประสิทธิภาพ:
- จัดการข้อมูลอนุกรมเวลาได้ง่าย
- รองรับ throughput สูง
- ตอบสนองต่อ range query ได้รวดเร็ว
- จัดเก็บข้อมูลปริมาณมากได้อย่างมีประสิทธิภาพ
- รันฟังก์ชันวิเคราะห์ที่ซับซ้อน
- ความสามารถพื้นฐานของ PostgreSQL:
- native partitioning, ดัชนีหลายประเภท, materialized views, ฟังก์ชัน window/analytic
- ส่วนขยายเพิ่มเติม:
- pg_partman: จัดการพาร์ทิชัน
- pg_cron: ตั้งเวลางาน
- columnar: การบีบอัด
- pg_ivm: incremental materialized views
- pg_tier: offload พาร์ทิชันเก่าเพื่อเก็บระยะยาว
pg_timeseries: วิธีที่ง่ายที่สุดในการจัดการข้อมูลอนุกรมเวลาใน PostgreSQL
- pg_timeseries รวมความสามารถจากหลายส่วนขยายเข้าด้วยกันเพื่อมอบอินเทอร์เฟซแบบรวมศูนย์
- ในการเริ่มต้น จำเป็นต้องมีตารางที่แบ่งพาร์ทิชันตามคอลัมน์ที่เกี่ยวข้องกับเวลา
CREATE TABLE measurements ( metric_name text, metric_value numeric, metric_time timestamptz NOT NULL ) PARTITION BY RANGE (metric_time); SELECT enable_ts_table('measurements'); - มี views หลายแบบเพื่อแสดงข้อมูลสำคัญ:
SELECT table_id, table_size_bytes FROM ts_table_info; SELECT * FROM ts_part_info; - สามารถตั้งนโยบายการบีบอัดและการลบของพาร์ทิชันได้:
SELECT set_ts_compression_policy('measurements', '90 days'); SELECT set_ts_retention_policy('measurements', '365 days'); - มีฟังก์ชันเพิ่มเติมให้ใช้งาน:
SELECT locf(avg(metric_value)) OVER (ORDER BY metric_time) avg_val, last(metric_name, metric_value) highest, metric_time FROM date_bin_table(NULL::measurements, '1 hour', '[2024-05-09,2024-06-07]');
ตอนนี้เรายังเพิ่งเริ่มต้น
- การสร้างส่วนขยายอนุกรมเวลาสำหรับ PostgreSQL ต้องใช้หลายองค์ประกอบ
- มีแผนจะพัฒนาอย่างเปิดเผยร่วมกับชุมชน
- โรดแมปปัจจุบัน:
- offload พาร์ทิชันเก่าไปยัง cold storage อย่าง S3
- ฟังก์ชันประมาณค่าเพื่อการวิเคราะห์ที่มีประสิทธิภาพ
- incremental materialized views
- rollup และ rolloff ของพาร์ทิชันเก่า
- ฟังก์ชันตัวช่วยด้านการวิเคราะห์เพิ่มเติม
- มีโรดแมปฉบับเต็มอยู่ใน GitHub README และจะจัดลำดับความสำคัญของฟีเจอร์ตามความต้องการของผู้ใช้
ความเห็นของ GN⁺
- ความสำคัญของข้อมูลอนุกรมเวลา: ความสำคัญของข้อมูลอนุกรมเวลาเพิ่มขึ้นในหลากหลายด้าน เช่น IoT การเงิน และการวิเคราะห์เว็บ โดย pg_timeseries มอบเครื่องมือสำหรับจัดการข้อมูลประเภทนี้อย่างมีประสิทธิภาพ
- ความสามารถในการขยายของ PostgreSQL: สามารถใช้ส่วนขยายของ PostgreSQL เพื่อรองรับงานด้านข้อมูลที่หลากหลาย และ pg_timeseries ก็รวมความสามารถเหล่านี้เข้าด้วยกันเพื่อเพิ่มความสะดวกให้ผู้ใช้
- ความร่วมมือกับชุมชน: พัฒนาในรูปแบบโอเพนซอร์ส จึงสามารถนำฟีดแบ็กจากชุมชนมาปรับใช้ได้ ซึ่งช่วยอย่างมากต่อการปรับปรุงฟีเจอร์และการแก้บั๊ก
- ผลิตภัณฑ์คู่แข่ง: เมื่อเทียบกับฐานข้อมูลอนุกรมเวลาอื่นอย่าง TimescaleDB มีข้อดีคือใช้งานได้โดยไม่มีข้อจำกัดด้านไลเซนส์ แต่ยังต้องพิจารณาเปรียบเทียบด้านประสิทธิภาพและฟีเจอร์
- ข้อควรพิจารณาในการนำไปใช้: เมื่อนำ pg_timeseries ไปใช้ ควรพิจารณาความเข้ากันได้กับฐานข้อมูลเดิม ประสิทธิภาพ และค่าใช้จ่ายในการดูแลรักษา นอกจากนี้ เนื่องจากข้อมูลอนุกรมเวลามีแนวโน้มเพิ่มขึ้นอย่างรวดเร็ว จึงจำเป็นต้องมีการจัดการสตอเรจอย่างเหมาะสม
1 ความคิดเห็น
ความเห็นจาก Hacker News
สรุปรวมคอมเมนต์จาก Hacker News
Incremental Materialized Views
pg_ivmหรือจะพัฒนาเองivmจะถูกรวมเข้าไปใน PostgreSQL coreการเปรียบเทียบกับ TimescaleDB
ตารางแบบ Append-Only
วิวัฒนาการของฐานข้อมูล Time-Series
ความจำเป็นของ Columnar Storage
ลิงก์ที่มีประโยชน์
รายการล็อกจาก Load Balancer
นวัตกรรมโอเพนซอร์ส
ไลเซนส์ PostgreSQL
ดีไซน์เว็บไซต์และ UI ของแอป