paint-brush
质子到底是什么?经过@progrockrec
1,501 讀數
1,501 讀數

质子到底是什么?

经过 Shawn Gordon4m2023/12/31
Read on Terminal Reader

太長; 讀書

Proton 是一个由 [Timeplus] 赞助的开源 Apache 2.0 许可项目,用 C++ 编写并由 [ClickHouse] 提供支持,它可以容纳历史数据和流数据。使用单个可执行文件,安装很简单。 Proton 具有许多漂亮的功能,包括创建物化视图来保存特定事件的能力。
featured image - 质子到底是什么?
Shawn Gordon HackerNoon profile picture
0-item
1-item

这一系列文章对我来说非常有趣,因为我了解并探索了新技术。自从我第一次发现它以来,看到它一直流行起来也很有趣。我上一篇关于Apache Paimon 的文章非常受欢迎,这让我大吃一惊,但似乎我并不是唯一一个对它到底是什么感兴趣的人。感谢那篇文章,我遇到了由Timeplus赞助的开源 Apache 2.0 许可项目Proton 。它是一个 SQL 数据库,可容纳历史数据和流数据。用 C++ 编写并由ClickHouse提供支持,重点是简单性和性能。使用单个可执行文件,安装很简单。


我看到的一个趋势是,越来越多的实时分析应用程序正在构建,但您不想构建两次。一次用于流式传输,一次用于历史回填。拥有一个可以以批处理或流模式甚至混合模式进行查询(将历史数据加入到传入数据流中)的单一平台无疑具有优势。看来 Proton 就是为了做到这一点而设计的。

质子概述

简而言之,我们有一个 ClickHouse 数据库,并且 Timeplus 添加了对流服务的支持。这将为您提供类似 Flink 的查询引擎和类似 Kafka 的流存储以及 ClickHouse 数据库。那么,那是什么样子的呢?


质子架构


虚线是 Proton 的用武之地。我建议通读架构文档,以充分了解可能性。


要创建随机数据流并使用 Proton 查询它,我们可以这样做:

 -- 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 有许多漂亮的功能;让我立即印象深刻的是能够创建物化视图来保存 Proton 中的特定事件。借用文档,假设您有一个报告 Web 事件的 Kafka 流,并且您希望保存损坏的链接报告,以便稍后查询它们,即使 Kafka 已关闭或事件已删除。它看起来像这样:

 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';


然后,如果你想直接查询物化视图并根据数据制作条形图,它看起来像这样:

 -- 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 │ ██ │ └────────┴─────┴─────┘


其中一些功能让我想起了Upsolver ,这是我几年前工作过的一家公司。


其他语言的驱动程序可用于 Java、Go 和 Python。将 Proton 与Redpanda之类的东西结合使用将是流历史数据的最小足迹。


还有许多其他功能可用,但这并不是一个教程。我想做一个简单的解释并提请注意一些功能。这些文档很简洁,总体来说写得很好,肯定比许多开源项目要好。

概括

虽然我个人目前并不需要这种安排,但我确实去过一些地方,见过一些公司,如果有这种安排,那就非常非常酷了。和这个家伙一样酷吗?

蒙古人与雪豹


可能不是,但话又说回来,什么都不是:)。撇开无聊不谈,Proton 团队在记录该项目并使其尽可能简单的安装和使用方面做得非常出色。我喜欢这些单一二进制项目,它们不需要具有大量依赖项的庞大 Java 生态系统。不过,请不要误会,Timeplus 有一个商业版本,可以为您提供比 Proton 现有版本更多的功能。然而,他们似乎非常支持 Proton 并欢迎社区。


请通过以下链接查看我的其他“到底是什么……”文章: