ชุมชนนักพัฒนาฐานข้อมูลกำลังถกเถียงกันอย่างคึกคักเกี่ยวกับแผนการเปลี่ยนแปลงของ 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