Clickhouse database ที่ขายความเร็ว และความสะดวกสบาย

ClickHouse เป็น column-oriented SQL database แบบ DBMS สำหรับ online analytical processing (OLAP) ที่เหมาะสำหรับ datasets ขนาดใหญ่ มี rows จำนวนมาก แต่จะดึงเพียงไม่กี่ columns มาใช้ในการ query แต่ละครั้ง จึงมีความรวดเร็วในการดึงข้อมูลไปใช้ ในเวลาเพียงไม่ถึง 1 วินาทีเท่านั้น

Column-oriented

จุดเด่นของ Clickhouse

  • เป็น SQL database จึงใช้ภาษา sql ในการ query ได้เลย

  • มี column type เพิ่มขึ้นจาก sql เดิม เช่น Array, LowCardinality, Map, IP ซึ่งสามารถอ่านเพิ่มเติม ได้ที่นี่เล้ย >> Column Types | ClickHouse Docs

  • การ create table แต่ละครั้งจะต้องเลือก engine ในการจัดการข้อมูล และประเภทการ query ภายใน table มีสองประเภทใหญ่ คือ MergeTree Engine Family และ Log Engine Family (เหมาะกับการเขียน table เล็กๆ จำนวนมาก ที่จะเอามาอ่านภายหลัง) ซึ่งโดยปกติแล้ว ถ้าไม่รู้จะเลือกอะไร ก็เลือก MergeTree engine ไปก่อนก็ได้จ้า อ่านเพิ่มเติมได้ที่นี้ >> Table Engines | ClickHouse Docs

  • Integrations เยอะมว๊าก 1 ในนั้น คือ S3 ที่สามารถดึงข้อมูลจากลิ้งค์ bucket มา query ได้เลย แม้จะยังไม่มีข้อมูลจริงๆ ใน clickhouse ก็ตาม!

จากรูป จะเปลี่ยน endpoint เป็น MinIO bucket แทน ซึ่งไม่มีปัญหาเลยค่า เพราะคำสั่งที่เกี่ยวข้องกับ S3 นั้น support minio อยู่แล้วนั่นเอง

Integrations มีทั้งขาเอาข้อมูลเข้า และเอาข้อมูลออก พร้อมเอาไปทำทั้ง data visualize และ data ingestion อยากรู้ว่า support ใครบ้าง ก็ตามไปที่ลิ้งค์นี้เลย >> Integrations | ClickHouse Docs

  • ข้อนี้สำคัญและน่าสนใจมาก ตรงที่พอมัน support การ Integrations มันทำให้ข้อมูลอัพเดทแบบ realtime มากๆ! หากเลือก select ดูเฉยๆ จาก S3 ข้อมูลมีเท่าไหร่ก็แสดงให้หมด หากเลือก create table โดยดึงมาจาก S3 เมื่อมา select อีกรอบ ก็จะแสดงข้อมูลอัพเดทล่าสุดให้เลย ไม่ต้องทำอะไร ก็มาให้ใช้แบบ auto!

เพิ่มมา 1 folder

สังเกตว่า พอเราจะ insert จะติด error แต่เมื่อลอง select ดู จะได้ข้อมูลแยกตาม folder ตรงตามไฟล์ที่เราอัพเดทใหม่ล่าสุดเลยค่า

  • เป็น distributed database จึง support การ replication/ sharding/ multi-master cross-region ด้วย

ข้อควรระวัง

  • การเขียน file ข้อมูล จะทำงานบน disk จึงแนะนำให้ batch การทำงาน (ย่อยเป็น task เล็กๆ) หรือเปิดโหมด asynchronous inserts

  • select ระบุ column ไปเลยจะดีกว่า หากใช้ select * from … จะทำให้ query ช้า หากจะ select * ควรกำหนด limit เข้าไปด้วย
1 Like

งดงามมาอ่าาา ต่อ S3 ได้ตรง ๆ เลย สุด :star_struck:

1 Like