ผมเคยรันระบบจัดเก็บ order book แบบเรียลไทม์ของตลาดคริปโตขนาดกลางราว 800 ล้านแถวต่อวัน บน PostgreSQL ธรรมดาเวอร์ชัน 14 ก่อนย้ายไปใช้ TimescaleDB แล้วเห็นความแตกต่างชัดเจน — insert latency ลดจาก 45ms เหลือ 3.2ms, query p99 ลด 94%, พื้นที่จัดเก็บลด 86% หลังบีบอัด บทความนี้คือบันทึกเทคนิคที่ผมใช้จริง พร้อมโค้ดสำเร็จรูปและผล benchmark ที่ตรวจซ้ำได้

ทำไมต้องใส่ใจการจัดเก็บ Order Book

Order book depth ระดับ L2 (ราคา-ขนาด) ของคู่เทรดยอดนิยมอย่าง BTC/USDT มีการอัปเดต 100–500 ครั้งต่อวินาที แต่ละ tick ประกอบด้วย 20–100 price levels ทั้งฝั่ง bid/ask ถ้าจัดเก็บแบบแฟลต 1 แถวต่อ level จะได้ 50,000 แถวต่อวินาที หรือ 4.3 พันล้านแถวต่อวัน ซึ่งเกินกำลัง PostgreSQL แบบ default ในมุมมองชุมชน ผู้ใช้งาน r/algotrading บน Reddit ส่วนใหญ่ยืนยันว่า TimescaleDB คือ "sweet spot" ระหว่างความง่ายของ SQL กับประสิทธิภาพของ time-series store โดยมี GitHub stars มากกว่า 18,000 ดาว สะท้อนความเชื่อมั่นจาก developer community

Schema ที่แนะนำ: ใช้ TimescaleDB Hypertable

ผมทดลอง 3 แบบหลัก ได้แก่ flat table, normalized multi-table และ TimescaleDB hypertable แบบหลังสุดให้ผลดีที่สุดในแง่ insert throughput และ query latency บนข้อมูลขนาด 1 พันล้านแถว

-- 1. เปิด extension ก่อน
CREATE EXTENSION IF NOT EXISTS timescaledb;

-- 2. สร้าง parent table สำหรับ L2 depth
CREATE TABLE orderbook_depth_l2 (
    ts           TIMESTAMPTZ    NOT NULL,
    exchange     TEXT           NOT NULL,
    symbol       TEXT           NOT NULL,
    side         SMALLINT       NOT NULL CHECK (