Cộng đồng hoan nghênh DuckDB chuyển sang phân tích SQL hiện đại với PEG, đồng thời giới thiệu các giải pháp thay thế

BigGo Editorial Team
Cộng đồng hoan nghênh DuckDB chuyển sang phân tích SQL hiện đại với PEG, đồng thời giới thiệu các giải pháp thay thế

Cộng đồng phát triển cơ sở dữ liệu đang tích cực thảo luận về kế hoạch chuyển đổi của DuckDB từ phân tích SQL truyền thống dựa trên YACC sang phương pháp Parser Expression Grammar (PEG) hiện đại hơn, đồng thời chia sẻ những hiểu biết quý giá về các giải pháp phân tích thay thế hiện có trên thị trường.

Phản hồi từ cộng đồng và các giải pháp thay thế

Thông báo về việc hiện đại hóa trình phân tích của DuckDB đã tạo ra nhiều cuộc thảo luận thú vị trong cộng đồng lập trình viên. Trong khi một số người khen ngợi sự đổi mới liên tục của dự án, những người khác chỉ ra các giải pháp hiện có đã trưởng thành. Một đề cập đáng chú ý là sqlparser-rs từ datafusion, đã được công nhận nhờ hỗ trợ toàn diện cho nhiều phương ngữ SQL khác nhau, đặc biệt là trong việc xử lý các yêu cầu cú pháp độc đáo của Microsoft SQL Server.

Từ góc độ thực tế, đối với bất kỳ ai cần phân tích SQL ngay hôm nay, tôi có thể giới thiệu sqlparser-rs của datafusion... Tôi không biết công cụ nào khác có thể đạt được mức độ hỗ trợ tương đương cho tất cả những đặc thù cú pháp ít được biết đến của các phương ngữ SQL khác nhau.

Tranh luận kỹ thuật về hiện đại hóa

Cộng đồng đã đưa ra những quan điểm phản biện thấu đáo về luận điểm hiện đại hóa. Một số lập trình viên cho rằng tuổi đời của một công nghệ không nên là lý do chính để thay thế. Họ nhấn mạnh rằng nhiều khái niệm máy tính từ những năm 1960 vẫn còn giá trị và hiệu quả cho đến ngày nay. Cuộc thảo luận nhấn mạnh rằng trình phân tích LALR(1) có thể được mở rộng trong thời gian chạy, cho thấy rằng lợi ích của PEG nên được đánh giá dựa trên ưu điểm kỹ thuật thay vì chỉ dựa vào độ tuổi.

So sánh hiệu năng:

  • Thời gian phân tích cú pháp của YACC cho TPC-H Query 1: ~0.03 mili giây
  • Thời gian phân tích cú pháp của cpp-peglib cho cùng một truy vấn: ~0.3 mili giây
  • Phân tích tập tin lớn (36.840 dòng):
    • Postgres (YACC): 24 mili giây
    • cpp-peglib: 266 mili giây (không có hành động), 339 mili giây (có tạo AST)

Tài nguyên giáo dục và cơ hội học tập

Các thành viên cộng đồng đã giới thiệu những tài nguyên học tập hữu ích cho những người quan tâm đến việc triển khai PEG. Cuốn sách miễn phí Janet for Mortals của Ian Henry được khuyến nghị như một tài liệu giới thiệu xuất sắc về các khái niệm PEG, với một số lập trình viên ghi nhận cách nó đã ảnh hưởng đến quan điểm lập trình và hiểu biết của họ về công nghệ phân tích.

Cân nhắc về hiệu năng

Mặc dù bài viết đề cập đến khoảng cách hiệu năng giữa YACC và các triển khai PEG, cộng đồng dường như ít lo ngại về việc giảm tốc độ 10 lần được báo cáo, đặc biệt là đối với các truy vấn phân tích, nơi thời gian phân tích chỉ chiếm một phần nhỏ trong tổng thời gian xử lý truy vấn. Trọng tâm dường như nghiêng về chức năng và khả năng mở rộng hơn là tốc độ phân tích thuần túy.

Cuộc thảo luận phản ánh xu hướng rộng lớn hơn trong công nghệ cơ sở dữ liệu, nơi các nhà phát triển đang cân nhắc giữa các phương pháp truyền thống đã được kiểm chứng và các giải pháp hiện đại, linh hoạt hơn có thể đáp ứng tốt hơn cho các đổi mới trong tương lai về phát triển ngôn ngữ truy vấn.

Nguồn tham khảo: Runtime-Extensible SQL Parsers Using PEG