DB Streaming ツール materialize を試してみた。
こんにちは k-jun です。今回は Rust 製の DB Streaming ツール materialize を試してみようとおもいます。
https://github.com/MaterializeInc/materialize
某デザインツールと名前が似ているは気にしなかったのでしょうか...? どうやら PostgreSQL を利用するようです。 どうやら firestore のように Client と非同期に通信するのではなく、Database 自体が非同期にデータを取り込んでいるっぽい...?
Run
Docker が用意されているのでこれで起動してみます。
$ docker run -p 6875:6875 materialize/materialized:v0.9.6 --workers 1
PostgereSQL 互換のようなので、psql で接続していきます。
$ psql -U materialize -h localhost -p 6875 materialize psql (13.4, server 9.5.0) Type "help" for help. materialize=>
何やら怪しげな SQL を叩いていきます。
materialize=> CREATE SOURCE market_orders_raw FROM PUBNUB SUBSCRIBE KEY 'sub-c-4377ab04-f100-11e3-bffd-02ee2ddab7fe' CHANNEL 'pubnub-market-orders'; CREATE SOURCE
materialize=> SHOW COLUMNS FROM market_orders_raw; name | nullable | type ------+----------+------ text | f | text (1 row)
どうも、ここ からデータを取り込んで Stream で流すみたいですね。それがなぜ Database の層で完結するのかは謎ですが。
materialize=> CREATE VIEW market_orders AS SELECT ((text::jsonb)->>'bid_price')::float AS bid_price, (text::jsonb)->>'order_quantity' AS order_quantity, (text::jsonb)->>'symbol' AS symbol, (text::jsonb)->>'trade_type' AS trade_type, to_timestamp(((text::jsonb)->'timestamp')::bigint) AS ts FROM market_orders_raw; CREATE VIEW
うーん。知らん syntax だし色々と謎。
CREATE MATERIALIZED VIEW avg_bid AS SELECT symbol, AVG(bid_price) AS avg FROM market_orders GROUP BY symbol; materialize=> SELECT * FROM avg_bid; symbol | avg -------------+-------------------- Apple | 200.12943851142316 Google | 303.64465372226175 Elerium | 153.0859976127034 Bespin Gas | 221.24196606620828 Linen Cloth | 245.64254669609824 (5 rows)
なんか取れたけど。なるほど、実際に流れているデータをカテゴライズした結果が返ってきているのか。
https://materialize.com/use-cases/
usecases を見てみると、リアルタイムな分析やエラー検知とどうもサービスで使用するというよりはその周りで使用することが想定されているみたい...? 今の所使いみちは自分も思いついていませんが、時間ができたらもう少し触ってみようと思います。
それでは今回はこのへんで。