Clickhouse เขียนบล็อกถึงแนวทางการปรับปรุงประสิทธิภาพของตัวฐานข้อมูล บนเครื่องที่ดิสก์ไม่เร็วนัก แต่ด้วยเทคนิคจ่างๆ โดยเฉพาะ lazy materialization ที่โหลดเฉพาะส่วนที่จำเป็น ทำให้ Clickhouse สามารถคิวรีได้เร็วอยู่ดี
เครื่องตัวอย่างที่ใช้สาธิตคือ m6i.8xlarge
บน AWS ที่สตอเรจ SSD จำกัดอยู่ที่ 3,000 IOPS และ 125MiB throughput ใช้ตัวอย่างการคิวฐานข้อมูลรีวิวสินค้า 150 ล้านรายการ กระบวนการคิวรีนี้สามารถคิวรี column เล็กๆ เช่น คะแนนโหวตรีวิวว่ามีประโยชน์ได้อย่างรวดเร็วเพราะปริมาณข้อมูลที่ต้องอ่านขึ้นมามีไม่มากนัก แต่เมื่ออ่านข้อมูลในคอลัมน์ใหญ่ๆ เช่น เนื้อหาการรีวิวก็ช้าลงอย่างมาก (ประมาณ 3 นาที) เพราะเสียเวลาไปกับการอ่านข้อมูลจากดิสก์
แนวทางแรกของ Clickhouse คือการทำ PREWHERE ด้วยการโหลดเฉพาะคอลัมน์ที่ต้องใช้ในการคิวรีขึ้นมาตรวจเงื่อนไขก่อน คอลัมน์เหล่านี้มักมีขนาดไม่ใหญ่มากทำให้สำรวจได้อย่างรวดเร็ว นอกจากนี้เมื่อแถว (row) ใดตกจากเงื่อนไขแรกๆ ที่ตรวจสอบแล้ว เมื่อตรวจสอบเงื่อนไขคอลัมน์ต่อๆ ไป Clickhouse ก็จะไม่โหลดข้อมูลแถวที่หลุดเงื่อนไขแล้วขึ้นหน่วยความจำอีก ทำให้ประสิทธิภาพรวมดีขึ้น แนวทางนี้ทำให้ Clickhouse ต้องโหลดข้อมูลสุดท้ายเฉพาะแถวที่เข้าเงื่อนไขเท่านั้น
ฟีเจอร์ lazy materialization ทำงานคล้ายกัน คือหากต้องการข้อมูลบางส่วน เช่น รีวิวที่มีคะแนนโหวตสูงสุด ก็จะโหลดคอลัมน์คะแนนรีวิวขึ้นมาเรียงลำดับก่อน แล้วโหลดคอลัมน์ที่เหลือหลังจากมั่นใจแล้วว่าต้องการใช้ข้อมูลนั้นจริงๆ
ตัวอย่างการเปิดฟีเจอร์ต่างๆ ทำให้คิวรีตัวอย่างที่ Clickhouse นำมาแสดงใช้เวลาลดลงจาก 220 วินาทีเหลือ 181ms โดยตัวคิวรียังเป็น SQL เดิม
ที่มา - Clickhouse