paint-brush
プロトンって一体何なの?@ProgRockRec
1,206 測定値
1,206 測定値

プロトンって一体何なの?

Shawn Gordon4m2023/12/31
Read on Terminal Reader

長すぎる; 読むには

Proton は、[Timeplus] がスポンサーとなっているオープンソースの Apache 2.0 ライセンス プロジェクトです。C++ で書かれ、[ClickHouse] を利用して、履歴データとストリーミング データの両方に対応します。実行可能ファイルが 1 つあるため、インストールは簡単です。 Proton には、特定のイベントを保存するマテリアライズド ビューを作成する機能など、多くの気の利いた機能があります。
featured image - プロトンって一体何なの?
Shawn Gordon HackerNoon profile picture
0-item
1-item

この一連の記事は、私にとって新しいテクノロジーについて学び、探究するのにとても楽しかったです。初めて発見して以来、何が流行っているのかを知るのも楽しいです。 Apache Paimonに関する私の前回の記事は非常に人気があり、非常に驚いたのですが、それが一体何なのか興味を持ったのは私だけではなかったようです。この記事のおかげで、 Timeplusがスポンサーとなっているオープンソースの Apache 2.0 ライセンス プロジェクトProtonに出会いました。これは、履歴データとストリーミング データの両方に対応する SQL データベースです。 C++ で書かれ、 ClickHouseを利用して作られており、シンプルさとパフォーマンスに重点が置かれています。実行可能ファイルが 1 つあるため、インストールは簡単です。


私が見てきた傾向として、リアルタイム分析アプリケーションがますます構築されていますが、それらを二度構築することは望ましくありません。 1 回はストリーミング用、もう 1 回は履歴バックフィル用です。単一のプラットフォームでバッチ モードやストリーミング モード、さらには受信データのストリームに履歴データを結合するハイブリッド モードでクエリを実行できることには、明らかな利点があります。 Proton はまさにそれを行うために作られたようです。

プロトンの概要

一言で言えば、ClickHouse データベースがあり、Timeplus がストリーミング サービスのサポートを追加しました。これにより、Flink のようなクエリ エンジンと、ClickHouse データベースを備えた Kafka のようなストリーミング ストレージが得られるはずです。それで、それはどのように見えるでしょうか?


プロトンアーキテクチャ


点線は 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 で利用できます。 Redpandaなどで Proton を使用すると、ストリーミング履歴データのフットプリントが最小限になります。


他にも多くの機能が利用可能ですが、これはチュートリアルを目的としたものではありません。簡単に説明し、いくつかの機能に注目したいと思います。ドキュメントは簡潔で、全体的によく書かれており、確かに多くのオープンソース プロジェクトよりも優れています。

まとめ

現時点では私個人としてはこの種の取り決めは必要ありませんが、これがあれば非常に素晴らしいと思われる場所に行ったり、会社を見たりしたことがあります。この男と同じくらいクールですか?

モンゴルとユキヒョウ


おそらくそうではありませんが、繰り返しになりますが、何もありません:)。軽薄さはさておき、Proton チームはプロジェクトを文書化し、インストールと使用を可能な限り簡単にする素晴らしい仕事をしました。私は、大量の依存関係を伴う広大な Java エコシステムを必要としない、これらの単一バイナリ プロジェクトが大好きです。ただし、誤解しないでください。Timeplus には Proton の標準リリースよりも多くの機能を提供する商用バージョンがあります。しかし、彼らは Proton を非常にサポートしており、コミュニティを歓迎しているようです。


以下のリンクから、私の他の「いったい何だ…」の記事をチェックしてください。