ชุมชนนักพัฒนาชื่นชม DuckDB ในการปรับเปลี่ยนการแยกวิเคราะห์ SQL แบบใหม่ด้วย PEG พร้อมนำเสนอทางเลือกอื่น

BigGo Editorial Team
ชุมชนนักพัฒนาชื่นชม DuckDB ในการปรับเปลี่ยนการแยกวิเคราะห์ SQL แบบใหม่ด้วย PEG พร้อมนำเสนอทางเลือกอื่น

ชุมชนนักพัฒนาฐานข้อมูลกำลังถกเถียงกันอย่างคึกคักเกี่ยวกับแผนการเปลี่ยนแปลงของ DuckDB จากการแยกวิเคราะห์ SQL แบบดั้งเดิมที่ใช้ YACC ไปสู่วิธีการแบบใหม่ที่เรียกว่า Parser Expression Grammar (PEG) พร้อมทั้งแบ่งปันข้อมูลเชิงลึกเกี่ยวกับทางเลือกในการแยกวิเคราะห์อื่นๆ ที่มีอยู่ในตลาดปัจจุบัน

การตอบรับจากชุมชนและทางเลือกอื่น

การประกาศปรับปรุงตัวแยกวิเคราะห์ของ DuckDB ได้จุดประกายให้เกิดการอภิปรายที่น่าสนใจในหมู่นักพัฒนา ในขณะที่บางคนชื่นชมนวัตกรรมอย่างต่อเนื่องของโครงการ คนอื่นๆ ก็ชี้ให้เห็นถึงโซลูชันที่มีอยู่แล้วและมีความเสถียร โดยเฉพาะอย่างยิ่ง sqlparser-rs จาก datafusion ที่ได้รับการยอมรับในด้านการรองรับไวยากรณ์ SQL หลากหลายรูปแบบ โดยเฉพาะในการจัดการกับไวยากรณ์เฉพาะของ Microsoft SQL Server

ในแง่ของการใช้งานจริง สำหรับผู้ที่ต้องการแยกวิเคราะห์ SQL ในปัจจุบัน ผมขอแนะนำ sqlparser-rs ของ datafusion... ผมไม่รู้จักตัวอื่นที่สามารถรองรับไวยากรณ์พิเศษที่แปลกๆ ของ SQL แต่ละรูปแบบได้ดีเท่านี้

การถกเถียงทางเทคนิคเรื่องการทำให้ทันสมัย

ชุมชนได้หยิบยกประเด็นโต้แย้งที่น่าคิดเกี่ยวกับการทำให้ทันสมัย นักพัฒนาบางคนเห็นว่าอายุของเทคโนโลยีไม่ควรเป็นเหตุผลหลักในการเปลี่ยนแปลง พวกเขาเน้นย้ำว่าแนวคิดด้านการคำนวณจำนวนมากจากยุค 1960 ยังคงมีคุณค่าและมีประสิทธิภาพจนถึงปัจจุบัน การอภิปรายชี้ให้เห็นว่าตัวแยกวิเคราะห์ LALR(1) สามารถขยายการทำงานได้ในขณะรันไทม์ ซึ่งแนะนำว่าควรประเมินประโยชน์ของ PEG จากข้อดีทางเทคนิคมากกว่าอายุการใช้งาน

การเปรียบเทียบประสิทธิภาพ:

  • เวลาในการแยกวิเคราะห์ของ YACC สำหรับ TPC-H Query 1: ประมาณ 0.03 มิลลิวินาที
  • เวลาในการแยกวิเคราะห์ของ cpp-peglib สำหรับคำสั่งเดียวกัน: ประมาณ 0.3 มิลลิวินาที
  • การแยกวิเคราะห์ไฟล์ขนาดใหญ่ (36,840 บรรทัด):
    • Postgres ( YACC ): 24 มิลลิวินาที
    • cpp-peglib : 266 มิลลิวินาที (ไม่รวมการดำเนินการ), 339 มิลลิวินาที (รวมการสร้าง AST )

แหล่งข้อมูลการศึกษาและโอกาสในการเรียนรู้

สมาชิกในชุมชนได้แนะนำแหล่งข้อมูลการเรียนรู้ที่มีประโยชน์สำหรับผู้ที่สนใจการใช้งาน PEG หนังสือฟรีเรื่อง Janet for Mortals โดย Ian Henry ได้รับการแนะนำว่าเป็นการแนะนำแนวคิด PEG ที่ยอดเยี่ยม โดยนักพัฒนาบางคนกล่าวว่าหนังสือเล่มนี้มีอิทธิพลต่อมุมมองการเขียนโปรแกรมและความเข้าใจเกี่ยวกับเทคโนโลยีการแยกวิเคราะห์ของพวกเขา

การพิจารณาด้านประสิทธิภาพ

แม้ว่าบทความจะกล่าวถึงช่องว่างด้านประสิทธิภาพระหว่าง YACC และการใช้งาน PEG แต่ชุมชนดูเหมือนจะไม่กังวลมากนักเกี่ยวกับรายงานที่ว่าประสิทธิภาพช้าลง 10 เท่า โดยเฉพาะอย่างยิ่งสำหรับการค้นหาเชิงวิเคราะห์ที่เวลาในการแยกวิเคราะห์เป็นเพียงส่วนเล็กน้อยของเวลาประมวลผลคำสั่งทั้งหมด ความสนใจดูเหมือนจะมุ่งเน้นไปที่ฟังก์ชันการทำงานและความสามารถในการขยายมากกว่าความเร็วในการแยกวิเคราะห์

การอภิปรายสะท้อนให้เห็นถึงแนวโน้มที่กว้างขึ้นในเทคโนโลยีฐานข้อมูล ที่นักพัฒนากำลังชั่งน้ำหนักระหว่างวิธีการแบบดั้งเดิมที่ผ่านการทดสอบมาแล้วกับโซลูชันสมัยใหม่ที่มีความยืดหยุ่นมากกว่าและสามารถรองรับนวัตกรรมในอนาคตของการพัฒนาภาษาคำสั่งได้ดีกว่า

แหล่งอ้างอิง: Runtime-Extensible SQL Parsers Using PEG