Chuỗi bài viết này mang lại cho tôi rất nhiều niềm vui vì tôi đã tìm hiểu và khám phá công nghệ mới. Thật thú vị khi thấy những gì đã được chú ý kể từ lần đầu tiên tôi phát hiện ra nó. Bài viết cuối cùng của tôi về Apache Paimon cực kỳ nổi tiếng, khiến tôi rất ngạc nhiên, nhưng có vẻ như tôi không phải là người duy nhất quan tâm đến nó là cái quái gì. Nhờ bài viết đó, tôi đã tìm hiểu được dự án mã nguồn mở được cấp phép Apache 2.0, Proton , được tài trợ bởi Timeplus . Đó là cơ sở dữ liệu SQL chứa cả dữ liệu lịch sử và dữ liệu truyền phát. Được viết bằng C++ và được hỗ trợ bởi ClickHouse , trọng tâm là sự đơn giản và hiệu suất. Với một tệp thực thi duy nhất, việc cài đặt rất đơn giản.
Xu hướng mà tôi nhận thấy là ngày càng có nhiều ứng dụng phân tích thời gian thực được xây dựng nhưng bạn không muốn xây dựng chúng hai lần. Một lần để phát trực tuyến và một lần để chèn lấp lịch sử. Sẽ có những lợi thế nhất định khi có một nền tảng duy nhất có thể truy vấn ở chế độ hàng loạt hoặc truyền phát hoặc thậm chí là chế độ kết hợp trong đó bạn đang kết hợp dữ liệu lịch sử với luồng dữ liệu đến. Có vẻ như Proton được tạo ra để làm việc đó.
Tóm lại, chúng tôi có cơ sở dữ liệu ClickHouse và Timeplus đã bổ sung hỗ trợ cho các dịch vụ phát trực tuyến. Điều đó sẽ giúp bạn có được công cụ truy vấn giống Flink và bộ lưu trữ phát trực tuyến giống Kafka với cơ sở dữ liệu ClickHouse đó. Vì vậy, nó trông như thế nào?
Đường chấm chấm là nơi Proton xuất hiện. Tôi khuyên bạn nên đọc qua tài liệu kiến trúc để hiểu rõ về những gì có thể làm được.
Để tạo một luồng dữ liệu ngẫu nhiên và truy vấn nó bằng Proton, chúng ta có thể làm như sau:
-- Create a stream with random data. CREATE RANDOM STREAM devices(device string default 'device'||to_string(rand()%4), temperature float default rand()%1000/10); -- Run the long-running stream query. SELECT device, count(*), min(temperature), max(temperature) FROM devices GROUP BY device; ┌─device──┬─count()─┬─min(temperature)─┬─max(temperature)─┐ │ device0 │ 2256 │ 0 │ 99.6 │ │ device1 │ 2260 │ 0.1 │ 99.7 │ │ device3 │ 2259 │ 0.3 │ 99.9 │ │ device2 │ 2225 │ 0.2 │ 99.8 │ └─────────┴─────────┴──────────────────┴──────────────────┘
Proton có nhiều tính năng tiện lợi; một điều khiến tôi ấn tượng ngay lập tức là khả năng tạo một chế độ xem cụ thể hóa để lưu các sự kiện cụ thể trong Proton. Mượn từ tài liệu, giả sử bạn có luồng Kafka báo cáo các sự kiện web và bạn muốn lưu các báo cáo liên kết bị hỏng để bạn có thể truy vấn chúng sau này, ngay cả khi Kafka ngừng hoạt động hoặc các sự kiện đã bị xóa. Nó sẽ trông giống như thế này:
create materialized view mv_broken_links as select raw:requestedUrl as url,raw:method as method, raw:ipAddress as ip, raw:response.statusCode as statusCode, domain(raw:headers.referrer) as referrer from frontend_events where raw:response.statusCode<>'200';
Sau đó, nếu bạn muốn truy vấn trực tiếp chế độ xem cụ thể hóa và tạo biểu đồ thanh từ dữ liệu, nó sẽ trông như thế này:
-- streaming query select * from mv_broken_links; -- historical query select method, count() as cnt, bar(cnt,0,40,5) as bar from table(mv_broken_links) group by method order by cnt desc; ┌─method─┬─cnt─┬─bar─┐ │ GET │ 25 │ ███ │ │ DELETE │ 20 │ ██▌ │ │ HEAD │ 17 │ ██ │ │ POST │ 17 │ ██ │ │ PUT │ 17 │ ██ │ │ PATCH │ 17 │ ██ │ └────────┴─────┴─────┘
Một số chức năng này làm tôi nhớ đến Upsolver , một công ty mà tôi đã làm việc cách đây vài năm.
Trình điều khiển cho các ngôn ngữ khác có sẵn cho Java, Go và Python. Sử dụng Proton với thứ gì đó như Redpanda sẽ tiêu tốn rất ít thời gian để truyền dữ liệu lịch sử.
Có rất nhiều tính năng khác có sẵn nhưng đây không phải là hướng dẫn. Tôi muốn giải thích nhẹ nhàng và thu hút sự chú ý đến một số tính năng. Các tài liệu ngắn gọn và nhìn chung được viết tốt, chắc chắn tốt hơn nhiều dự án nguồn mở.
Mặc dù cá nhân tôi không cần kiểu sắp xếp này vào lúc này, nhưng tôi chắc chắn đã đến nhiều nơi và thấy những công ty có thể có được điều này sẽ rất tuyệt vời. Lạnh lùng như anh chàng này?
Có lẽ là không, nhưng một lần nữa, không có gì cả :). Bỏ qua sự phù phiếm, nhóm Proton đã hoàn thành xuất sắc công việc ghi lại dự án và làm cho việc cài đặt và sử dụng trở nên đơn giản nhất có thể. Tôi yêu thích những dự án nhị phân đơn không cần hệ sinh thái Java rộng lớn với vô số phụ thuộc. Tuy nhiên, đừng nhầm lẫn, Timeplus có phiên bản thương mại cung cấp cho bạn nhiều khả năng hơn phiên bản Proton có sẵn. Tuy nhiên, họ có vẻ rất ủng hộ Proton và chào đón cộng đồng.
Hãy xem các bài viết khác của tôi Cái quái gì là… ở các liên kết bên dưới: