Cloudflare รายงานถึงการปรับปรุงโครงสร้างพื้นฐานหลังบ้านของบริษัท จากเดิมมีฐานข้อมูลมาตรฐานสองตัว คือ PostgreSQL สำหรับแอปพลิเคชั่น และ ClickHouse สำหรับการเก็บข้อมูลระดับสิบล้านชุดต่อวินาที ล่าสุดทีมงานตัดสินใจเพิ่ม TimescaleDB เพื่อให้สมดุลระหว่างความง่ายและความเร็ว
ความต้องการฐานข้อมูลใหม่เกิดจากบริการ Digital Experience Monitoring (DEX) ที่เก็บข้อมูลการเชื่อมต่อ Cloudflare WARP ของผู้ใช้ แล้วนำมาแสดงเป็น dashboard ในเว็บ โดย WARP ยิง log เข้ามายังบริการทุกๆ 2 นาที และเก็บข้อมูลไว้ 7 วัน
ตัวแอปเดิมนั้นเป็น React ที่มี backend เป็น monolith ก้อนเดียว เชื่อมต่อกับ PostgreSQL โดยตัวแอปก็ทำงานได้ดี แต่การเก็บข้อมูล analytics นั้นไม่เหมาะกับ PostgreSQL แต่เมื่อไปดู ClickHouse พบว่าต้องการส่วนประกอบหลายชิ้น เช่น logfwdr และ Kafka เนื่องจาก ClickHouse ออกแบบมาเพื่อการเขียนแบบ batch เป็นหลัก
ทีมงานตัดสินใจไม่ยอมใช้ ClickHouse แล้วยิง log ลง PostgreSQL โดยตรง ระบบทำงานได้ดีในช่วงแรก แต่เมื่อมีการใช้งานมากขึ้นเรื่อยๆ ตาราง log ก็ทะลุ 1,000 ล้านแถว ลูกค้ารายใหญ่ที่จำนวนอุปกรณ์เยอะๆ เริ่มคิวรีข้อมูลระยะยาว 7 วันได้ช้าลง ลูกค้าบางรายมีอุปกรณ์ติดตั้ง WARP มากกว่า 30,000 ชุด ทีมงานต้องออปติไมซ์ด้วยการทำตารางสรุปไว้ล่วงหน้า แม้ PostgreSQL จะมีฟีเจอร์บางส่วนช่วยได้ เช่น table partition แบะ materialized views แต่ก็ไม่สำงานอัตโนมัติ
สุดท้ายทีมงานจึงตัดสินใจทดสอบ TimescaleDB เนื่องจากมันเป็นส่วนขยาย PostgreSQL แต่มีความสามารถ partition อัตโนมัติ สามารถทำ aggregate ต่อเนื่องได้เอง ผลทดสอบการคิวรีข้อมูลระดับ 500-1,000 ล้านแถว เมื่อใช้ฟีเจอร์เร่งความเร็วต่างๆ เช่น compress, segmenting ก็ทำให้การคิวรีลดเวลาเหลือเพียงไม่ถึง 5 วินาที จากเดิมใช้ 1-2 นาที ขนาดข้อมูลบนดิสก์ลดลง 33 เท่าตัว
ผลการทดลองพบว่า TimescaleDB รองรับการใส่ข้อมูลได้ระดับแสนชุดต่อวินาที โดยต้องอาศัยการออปติไมซ์บ้าง เช่น ปิด synchronous replication และ fsync เพื่อเร่งความเร็ว เพราะข้อมูล dashboard ยอมรับข้อมูลหายได้ ปิด index แทบทั้งหมด ยกเว้น (account_id, timestamp) เท่านั้น เพราะพบว่าอัตราการเขียนดีขึ้นและความเร็วการคิวรีก็ไม่ได้ลดลงมาก
ที่มา - Cloudflare
on
TimescaleDB…
max212 Thu, 17/07/2025 - 23:04
TimescaleDB ผมใช้ทำเป็นส่วนสำหรับเก็บข้อมูลประมวลผลสรุป สำหรับทำ Dashboard แบบว่าของฟรีที่โคตรดีและ แรงมาก ตั้งกฎลบข้อมูลเก่าอัตโนมัติก็ง่ายมาก
single node…
lew Thu, 17/07/2025 - 23:15
In reply to TimescaleDB… by max212
single node ก็เวิร์คใช่ไหมครับ ไว้จะใช้แทน postgres เดิมๆ เลย
เคยลองใส่กับ pgvector ไหมครับ
ไม่เคยใช้ pgvector เลยครับ…
max212 Sat, 19/07/2025 - 19:28
In reply to single node… by lew
ไม่เคยใช้ pgvector เลยครับ ผมใช้แบบ single node บน docker สเปคต่ำๆ
เปลี่ยนชื่อเป็น TigerData…
sake Fri, 18/07/2025 - 11:34
เปลี่ยนชื่อเป็น TigerData แล้ว
แต่เดี่ยวคงเปลี่ยนกลับเพราะชื่อเดิมน่าจะติดตลาดไปแล้ว