EventQL: Ngôn Ngữ Truy Vấn Chuyên Biệt Cho Kiến Trúc Event Sourcing Thu Hút Thảo Luận Trong Cộng Đồng Lập Trình Viên

Nhóm Cộng đồng BigGo
EventQL: Ngôn Ngữ Truy Vấn Chuyên Biệt Cho Kiến Trúc Event Sourcing Thu Hút Thảo Luận Trong Cộng Đồng Lập Trình Viên

Trong thế giới phát triển phần mềm, kiến trúc event sourcing đã nổi lên như một mô hình mạnh mẽ để xây dựng các ứng dụng bền vững. Thay vì chỉ lưu trữ trạng thái hiện tại của dữ liệu, phương pháp này ghi lại mọi thay đổi như một sự kiện bất biến. Điều này tạo ra một lịch sử kiểm tra hoàn chỉnh về mọi thứ đã xảy ra trong một hệ thống. Thách thức luôn là làm thế nào để truy vấn hiệu quả nhật ký sự kiện không ngừng phát triển này. Sự ra mắt gần đây của EventQL, một ngôn ngữ truy vấn tùy chỉnh được thiết kế đặc biệt cho các hệ thống sử dụng event sourcing, đã khơi mào những cuộc thảo luận thú vị trong cộng đồng lập trình viên về tương lai của việc truy vấn sự kiện.

Triết Lý Đằng Sau Việc Xây Dựng Một Ngôn Ngữ Truy Vấn Mới

Khi nhóm EventSourcingDB bắt tay vào tạo kho lưu trữ sự kiện của họ, họ phải đối mặt với một quyết định cơ bản: áp dụng các tiêu chuẩn truy vấn hiện có như SQL hoặc xây dựng một cái gì đó hoàn toàn mới. Họ đã chọn con đường thứ hai, lập luận rằng SQL truyền thống có sự không tương thích về mặt khái niệm với các luồng sự kiện. SQL phát triển cho các bảng quan hệ với các bản ghi có thể thay đổi, trong khi event sourcing xử lý các sự kiện bất biến được sắp xếp theo thứ tự thời gian. Nhóm cũng đặt câu hỏi về cấu trúc cơ bản của SQL, lưu ý rằng việc bắt đầu các truy vấn bằng SELECT cảm thấy ngược khi về mặt khái niệm, bạn bắt đầu bằng cách xác định nguồn dữ liệu của mình.

EventQL đảo ngược cách tiếp cận thông thường này. Các truy vấn bắt đầu bằng mệnh đề FROM, phản ánh cách các nhà phát triển tự nhiên nghĩ về việc khám phá các luồng sự kiện. Bạn bắt đầu bằng cách chỉ định những sự kiện bạn đang kiểm tra, sau đó lọc chúng và cuối cùng chiếu kết quả thành định dạng mong muốn. Thiết kế có chủ đích này mở rộng đến cả việc lựa chọn thuật ngữ - sử dụng PROJECT INTO thay vì các thuật ngữ kỹ thuật như map để nhấn mạnh mục đích đằng sau thao tác hơn là chỉ sự biến đổi mang tính cơ học.

Khoảnh khắc bạn có khả năng chỉ định một cách khai báo một mạng lưới các phép chiếu xuôi dòng, bạn có thể hoán đổi chúng nóng, kiểm soát phiên bản chúng, và du hành thời gian dọc theo chiều-thời-gian-phiên-bản-mã và chiều-thời-gian-dữ-liệu một cách độc lập - điều này có thể thật phi thường.

So sánh cú pháp EventQL và SQL

Khía cạnh EventQL SQL truyền thống
Bắt đầu truy vấn Mệnh đề FROM Mệnh đề SELECT
Chiếu kết quả PROJECT INTO SELECT
Mô hình dữ liệu Luồng sự kiện Bảng quan hệ
Mục đích sử dụng chính Phân tích tức thời, gỡ lỗi Truy vấn đa mục đích
Kiểu dữ liệu Nghiêm ngặt, chuyển đổi tường minh Thường chuyển đổi ngầm định

Phản Ứng Của Cộng Đồng Và Các Cách Tiếp Cận Thay Thế

Cộng đồng lập trình viên đã phản hồi với cả sự tò mò và những phân tích sâu sắc. Một số bình luận ngay lập tức so sánh với các hệ thống khác trong lĩnh vực này, đặc biệt là Temporal, hệ thống cũng xử lý các luồng sự kiện và phát lại xác định. Điều này đã châm ngòi cho các cuộc thảo luận về việc liệu EventSourcingDB có đại diện cho một cách tiếp cận hoàn toàn mới hay chỉ tuân theo các mẫu đã được thiết lập với các lựa chọn triển khai khác nhau.

Các nhà phát triển khác chỉ ra các công nghệ thay thế giải quyết các thách thức tương tự từ những góc độ khác nhau. Các hệ thống như Materialize và Feldera được đề cập như những ví dụ về các cách tiếp cận có cơ sở toán học vững chắc để tạo các khung nhìn vật chất hóa thời gian thực bằng cách sử dụng SQL. Các hệ thống này có thể duy trì các hệ thống phân cấp phức tạp của các khung nhìn dẫn xuất cập nhật tự động khi dữ liệu cơ sở thay đổi, tương tự như cách các bảng tính tính toán lại khi các ô đầu vào được sửa đổi. Các công nghệ chính đằng sau những hệ thống này - DBSP (Delta Binary Synchronization Process) và Differential Dataflow - đại diện cho nghiên cứu học thuật hiện đang được ứng dụng vào thực tế.

Ứng Dụng Thực Tế Và Cân Nhắc Về Hiệu Suất

EventQL tự định vị mình như một giải pháp cho các trường hợp sử dụng cụ thể hơn là một ngôn ngữ truy vấn phù hợp cho mọi mục đích. Nó tỏ ra xuất sắc trong các tình huống mà các phép chiếu được xây dựng sẵn là quá mức cần thiết: gỡ lỗi các sự cố trong môi trường sản xuất, khám phá dữ liệu lịch sử để phân tích một lần, hoặc điều tra các mẫu hình không được dự đoán trước trong thiết kế hệ thống ban đầu. Ngôn ngữ này bao gồm các tính năng như nhiều mệnh đề FROM để kết hợp các luồng, khả năng nhóm và tổng hợp, và các truy vấn con để lọc phức tạp.

Tuy nhiên, nhóm EventSourcingDB rất minh bạch về các hạn chế hiệu suất. Hệ thống chủ yếu lập chỉ mục siêu dữ liệu như loại sự kiện, chủ thể và dấu thời gian thay vì các cấu trúc trọng tải JSON sâu. Các truy vấn lọc trên các trường trọng tải tùy ý có thể kích hoạt việc quét toàn bộ nhật ký sự kiện. Cách tiếp cận trung thực về sự đánh đổi này đã được ghi nhận tích cực trong các cuộc thảo luận cộng đồng, với các nhà phát triển đánh giá cao hướng dẫn rõ ràng về khi nào nên sử dụng EventQL so với khi nào nên xây dựng các phép chiếu được tối ưu hóa cho dữ liệu được truy cập thường xuyên.

Các Trường Hợp Sử Dụng EventQL

  • Được Khuyến Nghị Cho:

    • Gỡ lỗi các vấn đề trong môi trường production
    • Khám phá dữ liệu một lần
    • Phân tích ranh giới tính nhất quán động
    • Các truy vấn tùy chỉnh thỉnh thoảng
  • Không Được Khuyến Nghị Cho:

    • Các thao tác đọc có tần suất cao
    • Các đường dẫn có độ trễ quan trọng
    • Các truy vấn production lặp lại

Tương Lai Của Các Công Cụ Truy Vấn Sự Kiện

Sự ra đời của EventQL phản ánh một xu hướng rộng hơn trong thiết kế cơ sở dữ liệu: tạo ra các công cụ chuyên biệt cho các mẫu dữ liệu cụ thể thay vì cố gắng áp đặt các giải pháp đa mục đích. Như một thành viên cộng đồng nhận xét, có tiềm năng đáng kể cho các công cụ trong tương lai thu hẹp khoảng cách giữa phân tích thăm dò và các khung nhìn vật chất hóa đạt cấp độ sản xuất. Khả năng chỉ định một cách khai báo các mạng lưới phép chiếu có thể được kiểm soát phiên bản, hoán đổi nóng và du hành thời gian đại diện cho một hướng đi thú vị cho các hệ thống sử dụng event sourcing.

Mặc dù EventQL đại diện cho một giải pháp tập trung cho EventSourcingDB, các cuộc thảo luận trong cộng đồng cho thấy sự phát triển của việc truy vấn sự kiện mới chỉ bắt đầu. Khi ngày càng nhiều tổ chức áp dụng các mẫu event sourcing, nhu cầu về các công cụ truy vấn chuyên biệt có thể sẽ tăng lên, có khả năng dẫn đến các nỗ lực tiêu chuẩn hóa hoặc sự xuất hiện của nhiều cách tiếp cận cạnh tranh được điều chỉnh cho các trường hợp sử dụng và yêu cầu hiệu suất khác nhau.

Sự phát triển của EventQL làm nổi bật một sự trưởng thành quan trọng trong hệ sinh thái event sourcing. Thay vì coi các kho lưu trữ sự kiện như các nhật ký chỉ có thể thêm đơn giản, các nhà phát triển hiện đang xây dựng các công cụ tinh vi để trích xuất những hiểu biết có ý nghĩa từ các luồng sự kiện. Sự tiến triển từ lưu trữ cơ bản đến khả năng truy vấn thông minh này cho thấy event sourcing đang phát triển từ một mô hình kiến trúc thích hợp thành một cách tiếp cận chủ đạo với chuỗi công cụ chuyên biệt của riêng nó.

Tham khảo: Thiết kế EventQL, một Ngôn ngữ Truy vấn Sự kiện