จากบทความเรื่อง Using ClickHouse as an Analytic Extension for MySQL
ซึ่งเขียนโดย Percona นั้น
ทำการอธิบายการนำข้อมูลจาก MySQL ไปวิเคราะห์ผ่าน ClickHouse
โดยใช้งาน extension สำหรับ MySQL นั่นเอง
ที่สำคัญไม่ใช่เอามาแทนที่ แต่เอามาทำงานตาม use case ที่เหมาะสม

สิ่งที่บทความอธิบายคือ ทำไมถึงต้องมีตัวช่วยสำหรับการ Analytic ด้วย ?

แน่นอนว่า MySQL ไม่สนับสนุน หรือ ไม่เหมาะสม เป็นดังนี้

  • จำนวน table มากขึ้น รวมทั้งข้อมูลบเป็นแบบไม่เปลี่ยนแปลง (Immutable data) และที่น่ากลัวคือ transaction data/table
  • ต้องการทำ aggregation query ที่หนัก ๆ เราจะเจอได้จากพวก having, group by นั่นเอง ยิ่งทำบนข้อมูลขนาดใหญ่ ยิ่งสนุกสนาน

เมื่อเจอข้อมูลและความต้องการเหล่านี้
ทำให้การ process ข้อมูลช้า รอนาน
หรือต้องเปลี่ยนไปทำงานแบบ baching ไป
จะเห็นได้ว่า สิ่งที่เป็นอยู่ น่าจะไม่เหมาะสมหรือไม่ ?

หนึ่งในคำตอบของความต้องการข้างต้น คือ ClickHouse
ที่ได้เตรียมการทำงานกับข้อมูลที่ไม่ปลี่ยนแปลง
การทำ aggregation ที่รวดเร็ว ดังนั้นทำงานแบบ realtime ได้เลย

ปล. ClickHouse มันถูกออกแบบมาเพื่อ analytic processing โดยเฉพาะ
ข้อมูลจัดเก็บในรูปแบบ colume-based และทำงานแบบ parallel อีกด้วย

แต่ ClickHouse ไม่ได้ support ACID แบบเต็มรูปแบบ
ดังนั้นเรื่องของ use case ที่ต้องการความถูกต้องจริงจัง ก็อาจจะไม่เหมาะนะ
รวมทั้งการ update/delete เยอะ ๆ ก็ไม่เหมาะ

ดังนั้น ใช้ให้ถูกกับงานด้วยนะ !!

รูปแบบการ integrate ClickHose กับ MySQL

มีอยู่ 3 รูปแบบคือ

รูปแบบที่ 1 ทำการดึงข้อมูลจาก MySQL ผ่าน ClickHouse

โดยใช้งานผ่าน MySQL database engine

รูปแบบที่ 2 ทำการย้ายข้อมูลจาก MySQL ไปยัง ClickHouse

โดยไม่ต้องมาดึงข้อมูล หรือ load มายัง MySQL เลย
ให้ใช้งานผ่าน ClickHose ตรง ๆ เลย สำหรับการ analytic

ใช้งานผ่าน MergeTree table engine

รูปแบบที่ 3 ทำการ mirror หรือ snapshot ข้อมูลจาก MySQL ไปยัง ClickHouse

โดยทำการ replicate ข้อมูลที่เปลี่ยนแปลงใน MySQL ไปเท่านั้น
ใช้งานผ่าน ReplacingMergeTree

เป็นอีกแนวทางที่น่าสนใจ ในการออกแบบระบบงาน
เพื่อให้ตอบโจทย์ทาง business

Reference Websites