2 คะแนน โดย GN⁺ 2024-10-23 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

บทนำ

  • JSON ได้กลายเป็นฟอร์แมตมาตรฐานสำหรับการจัดการข้อมูลกึ่งมีโครงสร้างและไม่มีโครงสร้างในระบบข้อมูลสมัยใหม่
  • ClickHouse ตระหนักถึงความสำคัญของ JSON และได้แก้ไขความท้าทายหลายประการในการใช้งาน JSON อย่างมีประสิทธิภาพในระดับขนาดใหญ่

ความท้าทาย

  • ความท้าทาย 1: ที่เก็บข้อมูลแบบคอลัมน์อย่างแท้จริง
    เพื่อให้ประมวลผลข้อมูล JSON ได้อย่างมีประสิทธิภาพเช่นเดียวกับคอลัมน์ประเภทอื่น จำเป็นต้องจัดเก็บเส้นทาง JSON ในรูปแบบคอลัมน์

  • ความท้าทาย 2: ปัญหาการผสานรวมข้อมูลและชนิดข้อมูลที่เปลี่ยนแปลงแบบไดนามิก
    ต้องสามารถจัดเก็บชนิดข้อมูลที่แตกต่างกันสำหรับเส้นทาง JSON เพื่อรักษาความสมบูรณ์ของข้อมูล

  • ความท้าทาย 3: ป้องกันการเพิ่มจำนวนมหาศาลของไฟล์ข้อมูลคอลัมน์บนดิสก์
    ในกรณีที่มีคีย์ JSON ที่ไม่ซ้ำจำนวนมาก ต้องมีการจำกัดการสร้างคอลัมน์เพื่อป้องกันไม่ให้ไฟล์คอลัมน์เพิ่มจำนวนมหาศาล

  • ความท้าทาย 4: การจัดเก็บแบบหนาแน่น
    ในกรณีที่มีคีย์ JSON ที่ไม่ซ้ำกันแต่พบไม่บ่อยจำนวนมาก ต้องหลีกเลี่ยงการจัดเก็บค่า NULL หรือค่าเริ่มต้นซ้ำซ้อน

ประเภทข้อมูล JSON ใหม่

  • ClickHouse ได้เปิดตัวประเภทข้อมูล JSON ใหม่สำหรับการประมวลผลข้อมูล JSON ประสิทธิภาพสูง
  • ประเภทนี้รองรับข้อมูลที่เปลี่ยนแปลงแบบไดนามิก พร้อมคงไว้ซึ่งการบีบอัดข้อมูลระดับสูงและประสิทธิภาพในการคิวรี
  • สามารถปรับแต่งประสิทธิภาพได้โดยการให้ hint สำหรับการ parse JSON

องค์ประกอบพื้นฐาน 1 - ประเภท Variant

  • ประเภท Variant ช่วยให้สามารถจัดเก็บค่าของชนิดข้อมูลที่แตกต่างกันได้อย่างมีประสิทธิภาพภายในคอลัมน์เดียวกันของตาราง
  • ใช้ซับคอลัมน์แยกสำหรับแต่ละชนิดข้อมูลเพื่อรักษาความสมบูรณ์ของข้อมูล

องค์ประกอบพื้นฐาน 2 - ประเภท Dynamic

  • ประเภท Dynamic ขยายความสามารถของประเภท Variant เพื่อให้สามารถจัดเก็บชนิดข้อมูลที่หลากหลายได้โดยไม่ต้องกำหนดชนิดล่วงหน้า
  • จำกัดจำนวนชนิดข้อมูลที่จัดเก็บเพื่อป้องกันการเพิ่มจำนวนมหาศาลของไฟล์คอลัมน์

ประเภท JSON ของ ClickHouse

  • โดยอาศัยประเภท Variant และ Dynamic จึงได้มีการนำประเภท JSON ใหม่มาใช้งานเพื่อแก้ทุกความท้าทาย
  • สามารถจัดเก็บได้โดยไม่ขึ้นกับโครงสร้างของอ็อบเจ็กต์ JSON และอ่านค่าได้โดยใช้เส้นทาง JSON เป็นซับคอลัมน์

สรุปโดย GN⁺

  • ประเภทข้อมูล JSON ใหม่ของ ClickHouse มุ่งเน้นไปที่การแก้ปัญหาด้านประสิทธิภาพของ JSON ในการวิเคราะห์ข้อมูลขนาดใหญ่
  • ประเภทนี้รองรับชนิดข้อมูลที่หลากหลาย พร้อมมอบประสิทธิภาพและความสามารถในการขยายระบบในระดับสูง
  • นอกจากนี้ยังวางรากฐานสำหรับการรองรับประเภทกึ่งมีโครงสร้างอื่น ๆ เช่น XML, YAML
  • มีประโยชน์สำหรับนักพัฒนาที่ใช้งาน ClickHouse และมอบข้อได้เปรียบด้านการบีบอัดข้อมูลและประสิทธิภาพการคิวรี

1 ความคิดเห็น

 
GN⁺ 2024-10-23
ความคิดเห็นจาก Hacker News
  • การตัดสินใจใช้ ClickHouse ที่ PostHog เป็นหนึ่งในการตัดสินใจที่ดีที่สุด ทำให้เราสามารถสร้างผลิตภัณฑ์ได้มากขึ้นบนชุดข้อมูลเดียวกันพร้อมกับขยายประสิทธิภาพไปได้ด้วย

    • เราใช้ ClickHouse มาตั้งแต่ก่อนจะมีฟีเจอร์ JSON และได้ตั้งงานที่แปลงฟิลด์ JSON เป็นคอลัมน์จริงตามรูปแบบการคิวรีคีย์ต่างๆ ใน JSON blob
    • เมื่อสร้างคอลัมน์จริงแล้ว ระบบจะส่งคิวรีไปรันที่คอลัมน์นั้นในช่วงรันไทม์ ทำให้ลดการใช้ CPU และ IO ได้อย่างมาก
    • JSON type ใหม่ของ ClickHouse ช่วยเพิ่มประสิทธิภาพโดยทำให้คอมพิวเตอร์ต้องทำงานน้อยลง
    • ทีม ClickHouse Inc. และคอมมูนิตี้เคลื่อนไหวกันเร็วมาก และคาดหวังกับการรองรับ Parquet และ Iceberg อย่างมาก
  • สงสัยว่าการเพิ่ม data type เข้าไปใน JSON ยังนับว่าเป็น JSON อยู่หรือไม่

    • ถ้า JSON parser ใน standard library อ่านไม่ได้ ก็คิดว่าควรใช้ชื่ออย่าง "CH-JSON" จะดีกว่า
    • ยังไม่ได้ลองใช้ ClickHouse แต่ผลลัพธ์ฟังดูเจ๋งมาก
  • ดีที่ได้เห็นฟีเจอร์นี้ใน ClickHouse

    • Snowflake เคยออก white paper ที่พูดถึงฟีเจอร์นี้ก่อน IPO และแอบแปลง JSON เป็นคอลัมน์เพื่อเพิ่มประสิทธิภาพ
  • ตอนประเมิน ClickHouse ก็คุ้มที่จะพิจารณา Apache Pinot ด้วย

    • ClickHouse ถูกออกแบบมาสำหรับการติดตั้งบนเครื่องเดียว และการรองรับคลัสเตอร์ยังไม่ดีนัก
    • Pinot ขยายแนวนอนได้ง่ายกว่า และเมื่อใช้ star-tree index แล้ว ประสิทธิภาพในการวิเคราะห์หลายมิติจะแตกต่างอย่างมาก
  • รู้สึกว่าน่าสนใจสำหรับข้อมูลที่เปลี่ยนแปลงแบบไดนามิก

    • หวังว่าจะช่วยแก้ปัญหาการตั้งค่า type ที่เกิดขึ้นตอนเก็บ log ใน Elasticsearch ได้
  • รอฟีเจอร์รองรับ JSON ของ ClickHouse มานานแล้ว และ type ใหม่กับ dynamic columns น่าจะมีประโยชน์มากเป็นพิเศษ

  • ClickHouse เป็นเครื่องมือที่ยอดเยี่ยม

    • ใช้กับงาน OLAP และจัดการฐานข้อมูลขนาด 600 ล้านแถว 300GB ได้โดยไม่มีปัญหา
    • คาดว่า JSON data type ใหม่จะเหมาะกับ use case ที่ตอนนี้แก้ด้วย nested tuple ได้ดีกว่า
  • ตอนลอง ClickHouse เมื่อไม่กี่สัปดาห์ก่อน มันตั้งชื่อไฟล์ตามชื่อคอลัมน์ ทำให้เกิดข้อผิดพลาดใน file system เพราะชื่อไฟล์ยาวและมีเครื่องหมายทับ

  • ClickHouse ยังถูกใช้งานน้อยกว่าที่ควร

    • มีความเชื่อว่า 'postgres คือทุกสิ่ง' แต่ถ้าจำเป็นต้องสเกลเกินกว่านั้น ก็ควรพิจารณา ClickHouse
    • clickhouse-local ยอดเยี่ยมมากสำหรับการจัดการ CSV ด้วย SQL และขอแนะนำอย่างยิ่งเมื่อคุณเบื่อ Google Sheets หรือ Excel