0Pricing
SQL Academy · บทเรียน

ตารางไฮเปอร์ของ TimescaleDB

เปลี่ยนตาราง Postgres ให้เป็นตารางไฮเปอร์ของ TimescaleDB พร้อมการแบ่งพาร์ทิชันตามเวลาโดยอัตโนมัติตามช่วงชังก์

ตารางไฮเปอร์ของ TimescaleDB เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

TimescaleDB คืออะไร

ส่วนขยายของ PostgreSQL ที่สร้างขึ้นสำหรับข้อมูลอนุกรมเวลา เพิ่มการแบ่งพาร์ทิชันตามเวลา การบีบอัด การเก็บรักษาข้อมูล และการรวมข้อมูลแบบต่อเนื่องโดยอัตโนมัติ ใช้งานแบบแยกเดี่ยวหรือร่วมกับ PostgreSQL ทั่วไปได้

ตารางไฮเปอร์

ตารางเดียวในเชิงตรรกะที่ถูกแบ่งออกเป็น "ชังก์" ตามเวลาในเชิงกายภาพ:

CREATE EXTENSION IF NOT EXISTS timescaledb;

CREATE TABLE metrics (
  ts TIMESTAMPTZ NOT NULL,
  device_id BIGINT NOT NULL,
  value DOUBLE PRECISION
);

SELECT create_hypertable('metrics', 'ts');
-- metrics is now a hypertable, chunks created automatically.

ช่วงเวลาของชังก์

ชังก์เริ่มต้นมีขนาด 7 วัน ควรปรับให้เหมาะกับความเร็วของข้อมูล (ใช้ชังก์ที่เล็กลงสำหรับข้อมูลที่มีความเร็วสูง):

SELECT create_hypertable('metrics', 'ts', chunk_time_interval => INTERVAL '1 day');
-- One chunk per day, smaller and faster to drop.

การแทรกข้อมูล

ใช้ INSERT ตามปกติ — TimescaleDB จะส่งแถวไปยังชังก์ที่ถูกต้อง:

INSERT INTO metrics (ts, device_id, value)
VALUES (NOW(), 1, 42.5);

การสอบถามตารางไฮเปอร์

มีลักษณะเหมือนตารางทั่วไป ตัววางแผนคำสั่งสอบถามจะตัดชังก์ที่ไม่เกี่ยวข้องออกสำหรับคำสั่งสอบถามที่จำกัดช่วงเวลา:

SELECT * FROM metrics
WHERE ts >= NOW() - INTERVAL '7 days'
ORDER BY ts DESC LIMIT 100;
-- Only the relevant chunks are read.

time_bucket: date_trunc ที่ชาญฉลาดกว่า

ตัวช่วยจัดกลุ่มของ TimescaleDB:

SELECT time_bucket('1 hour', ts) AS hour,
       AVG(value) AS avg_value
FROM metrics
WHERE device_id = 42
  AND ts >= NOW() - INTERVAL '24 hours'
GROUP BY hour
ORDER BY hour;

การแบ่งพาร์ทิชันหลายคอลัมน์

สำหรับงานที่มีผู้เช่าหลายราย ให้แบ่งพาร์ทิชันตาม device_id เพิ่มด้วย:

SELECT create_hypertable('metrics', 'ts', 'device_id', 4);
-- Hash-partitions device_id into 4 space partitions per time chunk.

การสอบถามโดยใช้ตัวกรองทั้งสอง

ประสิทธิภาพดีที่สุดเมื่อตัวกรองครอบคลุมมิติการแบ่งพาร์ทิชันทั้งสอง:

SELECT * FROM metrics
WHERE device_id = 42
  AND ts >= NOW() - INTERVAL '7 days';
-- Prunes by both time and space.

ดัชนีบนตารางไฮเปอร์

ดัชนีจะถูกนำไปใช้กับทุกชังก์:

CREATE INDEX metrics_device_idx ON metrics (device_id, ts DESC);
-- Composite index ideal for 'recent data for one device' queries.

การอัปเดตตารางไฮเปอร์

UPDATE และ DELETE ใช้งานได้ แต่ควรเกิดขึ้นไม่บ่อยกับข้อมูลอนุกรมเวลา ข้อมูลเก่ามักเป็นข้อมูลที่เพิ่มต่อท้ายเท่านั้นและไม่เปลี่ยนแปลง

การย้ายจากตารางทั่วไป

สามารถแปลงตารางที่มีอยู่เป็นตารางไฮเปอร์ได้:

SELECT create_hypertable('metrics', 'ts', migrate_data => true);

สรุปทบทวน

ตารางไฮเปอร์ = การแบ่งพาร์ทิชันตามเวลาโดยอัตโนมัติสำหรับ PostgreSQL

  • ตารางเดียวในเชิงตรรกะ แต่มีชังก์หลายส่วนในเชิงกายภาพ
  • create_hypertable + chunk_time_interval
  • ใช้ time_bucket สำหรับการรวมข้อมูลแบบแบ่งช่วง
  • ดัชนีจะถูกนำไปใช้กับชังก์ทั้งหมด

ตรวจสอบอย่างรวดเร็ว

คุณกำลังรับข้อมูลเมตริกจากอุปกรณ์ IoT ที่อัตรา 100,000 แถวต่อวินาที เหตุใดจึงควรแปลงตารางเป็นตารางไฮเปอร์ของ TimescaleDB

คำถามที่พบบ่อย

บทเรียน “ตารางไฮเปอร์ของ TimescaleDB” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ตารางไฮเปอร์ของ TimescaleDB” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ตารางไฮเปอร์ของ TimescaleDB”

เปลี่ยนตาราง Postgres ให้เป็นตารางไฮเปอร์ของ TimescaleDB พร้อมการแบ่งพาร์ทิชันตามเวลาโดยอัตโนมัติตามช่วงชังก์ คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ตารางไฮเปอร์ของ TimescaleDB” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ตารางไฮเปอร์ของ TimescaleDB
  2. การรวมข้อมูลแบบต่อเนื่อง
  3. นโยบายการบีบอัดและการเก็บรักษา
  4. การเลือกดัชนีสำหรับอนุกรมเวลา
← กลับไปที่ SQL Academy