SlideShare a Scribd company logo
© 2024 NTT DATA Group Corporation
PostgreSQLの
HTAP適応について考える
2024/12/6
株式会社NTTデータグループ
小林 隆浩
© 2024 NTT DATA Group Corporation 3
Agenda
01. データベースの技術トレンドとHTAP
02. HTAP with PostgreSQLの比較
03. まとめ
© 2024 NTT DATA Group Corporation 4
01.
データベースの技術トレンドと
HTAP
© 2024 NTT DATA Group Corporation 5
最近のデータベースでは …
⚫ コンピュートとストレージの分離は前提
⚫ クラウドサービス(DBaaS)を使うことが当たり前
• マネージドなハイパースケールデータベースが続々登場
⚫ 一つで色々まかなうコンバージドなデータベースが復権
• NewSQLの拡大
• OLTPも分析も1つのデータベースで
© 2024 NTT DATA Group Corporation 6
HTAPとは?
⚫ Hybrid Transactional and Analytical Processingの略語
⚫ OLTPとOLAPを結ぶETLを作りこむ必要がないのが利点
HTAP
OLTP OLAP
オンラインクエリ
• トランザクション
• 単発、短時間
• 低レイテンシ
ETL
分析クエリ
• Selectのみ
• 高負荷
• レイテンシは
重要でない
© 2024 NTT DATA Group Corporation 7
近年のHTAP構成の特徴
行ストア カラムナストア
レコード: B
レコード: A
⚫ レコードがデュアルフォーマット(行/列形式)で格納される。
テーブル
ディスク ディスク
メモリ
トランザクション/更新クエリ 分析クエリ
列: X 列: Y 列: Z
© 2024 NTT DATA Group Corporation 8
02.
HTAP with PostgreSQLの比較
© 2024 NTT DATA Group Corporation 9
HTAPデータベース (クラウド/OSS)
DB 提供 OSS
デュアル
フォーマット
カラムナ更新
可能?
分散配置
可能?
Heatwave MySQL Oracle No ◎ / in-memory ◎ ◎
TiDB/TiFlash PingCAP Yes ◎ / on-disk ◎ ◎
AlloyDB Omni Google No
◎ / in-memory
disk-cache
◎ 設定可能
Citus Microsoft Yes △ / on-disk × (更新不可) 設定可能
Hydra/pg_duckdb Hydra Yes
© 2024 NTT DATA Group Corporation 10
HeatWave MySQL
⚫ Oracle/OCIが提供するDBaaS。
⚫ OSSではなく、基本的にOCIの外では稼働できない。
⚫ デュアルフォーマットでインメモリのカラムナストアを持つ。
⚫ HeatWave Lakehouseでオブジェクトストアと組み合わせた構成も可能。
⚫ HeatWave(カラムナストア)ノードはMySQLノードと分離。
⚫ 分析クエリはHeatWaveノードで、他のクエリはMySQLノードで実
行。クエリのルーティングはユーザから透過的。
© 2024 NTT DATA Group Corporation 11
TiDB/TiFlash
⚫ TiDB/TiFlashはMySQL互換のスケーラビリティの高いデータベース。
⚫ オンディスクのデュアルフォーマット構成でHTAPをサポート。
© 2024 NTT DATA Group Corporation 12
Google AlloyDB Omni
⚫ AlloyDBは、Google CloudのPostgreSQL互換のDBaaS。
⚫ Omniは他クラウドやオンプレで稼働可能なAlloyDBパッケージ版。
⚫ OSSではなく、フリーでもない。Google Cloudがサポートを提供。
⚫ キャッシュとしてカラムナストアを持つデュアルフォーマットの
構成。
⚫ 最近のリリースで、カラムナストアをディスクキャッシュに持つ
構成も可能に。
© 2024 NTT DATA Group Corporation 13
(やってみる) Google AlloyDB Omni
⚫ AlloyDB OmniはDocker上で実行可能。
$ sudo alloydb database-server install --data-dir=/home/$USER/alloydb-data
$ sudo docker ps
CONTAINER ID IMAGE ….
2a09a3cb906f gcr.io/alloydb-omni/memory-agent:15.5.2 ….
409392c2b26e gcr.io/alloydb-omni/pg-service:15.5.2 ….
$ sudo docker exec -it pg-service psql -h localhost -U postgres
postgres=# ¥l
List of databases
Name | Owner |
alloydbadmin | alloydbadmin |
alloydbmetadata | alloydbadmin |
postgres | alloydbadmin |
template0 | alloydbadmin |
template1 | alloydbadmin |
AlloyDB Omniの
インストール
Omniのコンテナにpsqlで
接続して確認
© 2024 NTT DATA Group Corporation 14
(やってみる)Google AlloyDB Omni – カラムナキャッシュ ① -
# show google_columnar_engine.enabled;
google_columnar_engine.enabled
--------------------------------
on
# SELECT google_columnar_engine_add(
relation => 'lineitem',
columns => 'l_orderkey,l_extendedprice’);
google_columnar_engine_add
----------------------------
92
⚫ columnar_engineを利用可にし、対象のテーブルやカラムを選択。
postgresql.confで設定
手動でテーブルや列を選択して、
カラムナキャッシュを設定する
© 2024 NTT DATA Group Corporation 15
(やってみる)Google AlloyDB Omni – カラムナキャッシュ ② -
# explain analyze SELECT COUNT(l_orderkey), AVG(l_extendedprice) FROM lineitem;
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------
Finalize Aggregate (cost=74529.47..74529.48 rows=1 width=40) (actual time=725.176..725.277 rows=1 l
-> Gather (cost=74529.24..74529.45 rows=2 width=40) (actual time=623.643..725.253 rows=3 loops=1
Workers Planned: 2
Workers Launched: 2
-> Partial Aggregate (cost=73529.24..73529.25 rows=1 width=40) (actual time=202.669..202.672 ro
-> Parallel Append (cost=20.00..58528.37 rows=3000173 width=14) (actual time=4.981..202.64
-> Parallel Custom Scan (columnar scan) on lineitem (cost=20.00..58519.03 rows=2999950
Rows Removed by Columnar Filter: 0
Rows Aggregated by Columnar Scan: 1999967
Columnar cache search mode: native
-> Parallel Seq Scan on lineitem (cost=0.00..9.34 rows=223 width=14) (never executed)
Planning Time: 290.928 ms
Execution Time: 752.699 ms
⚫ 集約クエリはカラムナキャッシュを利用して実行される。
カラムナキャッシュの利用
© 2024 NTT DATA Group Corporation 16
(ユースケース)AlloyDB OmniによるDBaaS
⚫ データ&AIプラットフォームのAivenで、AlloyDB Omniを利用したDBaaSを
提供開始(当然、Google Cloudとビジネス提携)。
• カラムナキャッシュなど従来のPostgreSQL
にない機能も利用可能。
• AWSやAzureでもマネージドなAlloyDB
が利用可能。もちろんサポートもあり。
• ライセンス/サポート提供の形で、Google
Cloudがサードパーティと連携。
© 2024 NTT DATA Group Corporation 17
Citus
⚫ OSSのPostgreSQLのシャーディング拡張、カラムナストアを持つ。
⚫ デュアルフォーマットではなく、行または列形式のどちらか。
⚫ カラムナストアは追記のみ可能、個別の更新や削除はできない。
⚫ オンディスクのカラムナストアは高い圧縮率を実現。
© 2024 NTT DATA Group Corporation 18
(やってみる)Citus カラムナストア
# create table lineitem_col USING COLUMNAR as (select * from lineitem);
SELECT 6000664
# update lineitem_col set l_comment = 'updated.' where l_linenumber=1;
ERROR: UPDATE and CTID scans not supported for ColumnarScan
# delete from lineitem_col where l_linenumber=1;
ERROR: UPDATE and CTID scans not supported for ColumnarScan
⚫ アクセスメソッド COLUMNAR を指定してテーブルを作成。
Create tableで
カラムナストアであることを指定
カラムナストアは
個別の行を更新/削除すること
ができない
© 2024 NTT DATA Group Corporation 19
(やってみる) Citus カラムナストア – Explain plan -
# explain SELECT COUNT(l_orderkey), AVG(l_extendedprice) FROM lineitem_col;
QUERY PLAN
----------------------------------------------------------------------------------------------
Aggregate (cost=33312.81..33312.82 rows=1 width=40)
-> Custom Scan (ColumnarScan) on lineitem_col (cost=0.00..3309.49 rows=6000664 width=14)
Columnar Projected Columns: l_orderkey, l_extendedprice
⚫ 集約クエリではシンプルな実行計画を確認。
カラムナストアを利用
© 2024 NTT DATA Group Corporation 20
Hydra
⚫ ↓数か月前までは(Cfpを出した頃には)
⚫ HydraはOSSで、Citusをforkしたカラムナストア(でした)
⚫ カラムナストアは更新/削除が可能だが、表ロックを取っていた。
⚫ 開発元が大きく方針転換、pg_duckdbが主力に。
© 2024 NTT DATA Group Corporation 21
https://docs.hydra.so/start/architecture
pg_duckdb?
⚫ PostgreSQLの埋め込みとして機能するduckdb。
⚫ オブジェクトストアにあるデータレイクから、各種形式のファイ
ルを読み込み/書き出すことが可能。
• トランザクションクエリはPostgreSQLの通常テーブルで
受ける(左図のHeap)。
• 分析用データはDuckDB経由で列形式ファイルを読み
込み、行形式とJoinも可能。
• 過去データなどはParquetやIcebergなどの形式でオブ
ジェクトストアに格納。これまではETLツールを介していた
が、SQLでデータ処理と抽出が可能。
• 低コストのオブジェクトストレージに、高圧縮率のファイル
を格納。
© 2024 NTT DATA Group Corporation 22
pg_duckdbの実際の動き
⚫ AWSのS3に格納されたParquetのファイルを読み取る例。
⚫ ファイルロードが不要、処理も非常に高速。
# SELECT SUM(price) AS total, item_id
FROM read_parquet('s3://bucket-url/sample-file.parquet') AS (price float, item_id int)
GROUP BY item_id
ORDER BY total DESC;
⚫ クエリで加工した結果をS3にファイルで格納する例。
⚫ 使い慣れたSQL関数やCOPY句でデータレイクへの書出しが完了。
# COPY (SELECT user_id, item_id, price, purchased_at FROM purchases)
TO 's3://bucket-url/sample-file-modified.parquet';
© 2024 NTT DATA Group Corporation 23
(参考)Crunchy Data Warehouse
⚫ Crunchy DataのPGaaSであるCrunchy Bridgeで利用できる分析用DB。
⚫ pg_duckdbに先行して、データレイクからIceberg形式のファイル
の読込み/書出しに対応。
⚫ 同社が開発中のpg_parquetがOSSとして公開されている。
https://www.crunchydata.com/blog/how-we-fused-duckdb-into-postgres-with-crunchy-bridge-for-analytics
© 2024 NTT DATA Group Corporation 24
03.
まとめ
© 2024 NTT DATA Group Corporation 25
HTAP向けPostgreSQL:最近の流れ
Citus
AlloyDB
pg_parquet
pg_duckdb
• シングルフォーマット
• カラムナストアは追記のみ
• カラムナキャッシュ、高速ディスクキャッシュ
• デュアルフォーマット
• ストレージ外部化
• データレイク連携
2020 2021 2022 2023 2024
⚫ HTAP適応ではデータレイク連携が主流になる可能性あり。
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)

More Related Content

PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)

  • 1. © 2024 NTT DATA Group Corporation PostgreSQLの HTAP適応について考える 2024/12/6 株式会社NTTデータグループ 小林 隆浩
  • 2. © 2024 NTT DATA Group Corporation 3 Agenda 01. データベースの技術トレンドとHTAP 02. HTAP with PostgreSQLの比較 03. まとめ
  • 3. © 2024 NTT DATA Group Corporation 4 01. データベースの技術トレンドと HTAP
  • 4. © 2024 NTT DATA Group Corporation 5 最近のデータベースでは … ⚫ コンピュートとストレージの分離は前提 ⚫ クラウドサービス(DBaaS)を使うことが当たり前 • マネージドなハイパースケールデータベースが続々登場 ⚫ 一つで色々まかなうコンバージドなデータベースが復権 • NewSQLの拡大 • OLTPも分析も1つのデータベースで
  • 5. © 2024 NTT DATA Group Corporation 6 HTAPとは? ⚫ Hybrid Transactional and Analytical Processingの略語 ⚫ OLTPとOLAPを結ぶETLを作りこむ必要がないのが利点 HTAP OLTP OLAP オンラインクエリ • トランザクション • 単発、短時間 • 低レイテンシ ETL 分析クエリ • Selectのみ • 高負荷 • レイテンシは 重要でない
  • 6. © 2024 NTT DATA Group Corporation 7 近年のHTAP構成の特徴 行ストア カラムナストア レコード: B レコード: A ⚫ レコードがデュアルフォーマット(行/列形式)で格納される。 テーブル ディスク ディスク メモリ トランザクション/更新クエリ 分析クエリ 列: X 列: Y 列: Z
  • 7. © 2024 NTT DATA Group Corporation 8 02. HTAP with PostgreSQLの比較
  • 8. © 2024 NTT DATA Group Corporation 9 HTAPデータベース (クラウド/OSS) DB 提供 OSS デュアル フォーマット カラムナ更新 可能? 分散配置 可能? Heatwave MySQL Oracle No ◎ / in-memory ◎ ◎ TiDB/TiFlash PingCAP Yes ◎ / on-disk ◎ ◎ AlloyDB Omni Google No ◎ / in-memory disk-cache ◎ 設定可能 Citus Microsoft Yes △ / on-disk × (更新不可) 設定可能 Hydra/pg_duckdb Hydra Yes
  • 9. © 2024 NTT DATA Group Corporation 10 HeatWave MySQL ⚫ Oracle/OCIが提供するDBaaS。 ⚫ OSSではなく、基本的にOCIの外では稼働できない。 ⚫ デュアルフォーマットでインメモリのカラムナストアを持つ。 ⚫ HeatWave Lakehouseでオブジェクトストアと組み合わせた構成も可能。 ⚫ HeatWave(カラムナストア)ノードはMySQLノードと分離。 ⚫ 分析クエリはHeatWaveノードで、他のクエリはMySQLノードで実 行。クエリのルーティングはユーザから透過的。
  • 10. © 2024 NTT DATA Group Corporation 11 TiDB/TiFlash ⚫ TiDB/TiFlashはMySQL互換のスケーラビリティの高いデータベース。 ⚫ オンディスクのデュアルフォーマット構成でHTAPをサポート。
  • 11. © 2024 NTT DATA Group Corporation 12 Google AlloyDB Omni ⚫ AlloyDBは、Google CloudのPostgreSQL互換のDBaaS。 ⚫ Omniは他クラウドやオンプレで稼働可能なAlloyDBパッケージ版。 ⚫ OSSではなく、フリーでもない。Google Cloudがサポートを提供。 ⚫ キャッシュとしてカラムナストアを持つデュアルフォーマットの 構成。 ⚫ 最近のリリースで、カラムナストアをディスクキャッシュに持つ 構成も可能に。
  • 12. © 2024 NTT DATA Group Corporation 13 (やってみる) Google AlloyDB Omni ⚫ AlloyDB OmniはDocker上で実行可能。 $ sudo alloydb database-server install --data-dir=/home/$USER/alloydb-data $ sudo docker ps CONTAINER ID IMAGE …. 2a09a3cb906f gcr.io/alloydb-omni/memory-agent:15.5.2 …. 409392c2b26e gcr.io/alloydb-omni/pg-service:15.5.2 …. $ sudo docker exec -it pg-service psql -h localhost -U postgres postgres=# ¥l List of databases Name | Owner | alloydbadmin | alloydbadmin | alloydbmetadata | alloydbadmin | postgres | alloydbadmin | template0 | alloydbadmin | template1 | alloydbadmin | AlloyDB Omniの インストール Omniのコンテナにpsqlで 接続して確認
  • 13. © 2024 NTT DATA Group Corporation 14 (やってみる)Google AlloyDB Omni – カラムナキャッシュ ① - # show google_columnar_engine.enabled; google_columnar_engine.enabled -------------------------------- on # SELECT google_columnar_engine_add( relation => 'lineitem', columns => 'l_orderkey,l_extendedprice’); google_columnar_engine_add ---------------------------- 92 ⚫ columnar_engineを利用可にし、対象のテーブルやカラムを選択。 postgresql.confで設定 手動でテーブルや列を選択して、 カラムナキャッシュを設定する
  • 14. © 2024 NTT DATA Group Corporation 15 (やってみる)Google AlloyDB Omni – カラムナキャッシュ ② - # explain analyze SELECT COUNT(l_orderkey), AVG(l_extendedprice) FROM lineitem; QUERY PLAN ------------------------------------------------------------------------------------------------------------------- Finalize Aggregate (cost=74529.47..74529.48 rows=1 width=40) (actual time=725.176..725.277 rows=1 l -> Gather (cost=74529.24..74529.45 rows=2 width=40) (actual time=623.643..725.253 rows=3 loops=1 Workers Planned: 2 Workers Launched: 2 -> Partial Aggregate (cost=73529.24..73529.25 rows=1 width=40) (actual time=202.669..202.672 ro -> Parallel Append (cost=20.00..58528.37 rows=3000173 width=14) (actual time=4.981..202.64 -> Parallel Custom Scan (columnar scan) on lineitem (cost=20.00..58519.03 rows=2999950 Rows Removed by Columnar Filter: 0 Rows Aggregated by Columnar Scan: 1999967 Columnar cache search mode: native -> Parallel Seq Scan on lineitem (cost=0.00..9.34 rows=223 width=14) (never executed) Planning Time: 290.928 ms Execution Time: 752.699 ms ⚫ 集約クエリはカラムナキャッシュを利用して実行される。 カラムナキャッシュの利用
  • 15. © 2024 NTT DATA Group Corporation 16 (ユースケース)AlloyDB OmniによるDBaaS ⚫ データ&AIプラットフォームのAivenで、AlloyDB Omniを利用したDBaaSを 提供開始(当然、Google Cloudとビジネス提携)。 • カラムナキャッシュなど従来のPostgreSQL にない機能も利用可能。 • AWSやAzureでもマネージドなAlloyDB が利用可能。もちろんサポートもあり。 • ライセンス/サポート提供の形で、Google Cloudがサードパーティと連携。
  • 16. © 2024 NTT DATA Group Corporation 17 Citus ⚫ OSSのPostgreSQLのシャーディング拡張、カラムナストアを持つ。 ⚫ デュアルフォーマットではなく、行または列形式のどちらか。 ⚫ カラムナストアは追記のみ可能、個別の更新や削除はできない。 ⚫ オンディスクのカラムナストアは高い圧縮率を実現。
  • 17. © 2024 NTT DATA Group Corporation 18 (やってみる)Citus カラムナストア # create table lineitem_col USING COLUMNAR as (select * from lineitem); SELECT 6000664 # update lineitem_col set l_comment = 'updated.' where l_linenumber=1; ERROR: UPDATE and CTID scans not supported for ColumnarScan # delete from lineitem_col where l_linenumber=1; ERROR: UPDATE and CTID scans not supported for ColumnarScan ⚫ アクセスメソッド COLUMNAR を指定してテーブルを作成。 Create tableで カラムナストアであることを指定 カラムナストアは 個別の行を更新/削除すること ができない
  • 18. © 2024 NTT DATA Group Corporation 19 (やってみる) Citus カラムナストア – Explain plan - # explain SELECT COUNT(l_orderkey), AVG(l_extendedprice) FROM lineitem_col; QUERY PLAN ---------------------------------------------------------------------------------------------- Aggregate (cost=33312.81..33312.82 rows=1 width=40) -> Custom Scan (ColumnarScan) on lineitem_col (cost=0.00..3309.49 rows=6000664 width=14) Columnar Projected Columns: l_orderkey, l_extendedprice ⚫ 集約クエリではシンプルな実行計画を確認。 カラムナストアを利用
  • 19. © 2024 NTT DATA Group Corporation 20 Hydra ⚫ ↓数か月前までは(Cfpを出した頃には) ⚫ HydraはOSSで、Citusをforkしたカラムナストア(でした) ⚫ カラムナストアは更新/削除が可能だが、表ロックを取っていた。 ⚫ 開発元が大きく方針転換、pg_duckdbが主力に。
  • 20. © 2024 NTT DATA Group Corporation 21 https://docs.hydra.so/start/architecture pg_duckdb? ⚫ PostgreSQLの埋め込みとして機能するduckdb。 ⚫ オブジェクトストアにあるデータレイクから、各種形式のファイ ルを読み込み/書き出すことが可能。 • トランザクションクエリはPostgreSQLの通常テーブルで 受ける(左図のHeap)。 • 分析用データはDuckDB経由で列形式ファイルを読み 込み、行形式とJoinも可能。 • 過去データなどはParquetやIcebergなどの形式でオブ ジェクトストアに格納。これまではETLツールを介していた が、SQLでデータ処理と抽出が可能。 • 低コストのオブジェクトストレージに、高圧縮率のファイル を格納。
  • 21. © 2024 NTT DATA Group Corporation 22 pg_duckdbの実際の動き ⚫ AWSのS3に格納されたParquetのファイルを読み取る例。 ⚫ ファイルロードが不要、処理も非常に高速。 # SELECT SUM(price) AS total, item_id FROM read_parquet('s3://bucket-url/sample-file.parquet') AS (price float, item_id int) GROUP BY item_id ORDER BY total DESC; ⚫ クエリで加工した結果をS3にファイルで格納する例。 ⚫ 使い慣れたSQL関数やCOPY句でデータレイクへの書出しが完了。 # COPY (SELECT user_id, item_id, price, purchased_at FROM purchases) TO 's3://bucket-url/sample-file-modified.parquet';
  • 22. © 2024 NTT DATA Group Corporation 23 (参考)Crunchy Data Warehouse ⚫ Crunchy DataのPGaaSであるCrunchy Bridgeで利用できる分析用DB。 ⚫ pg_duckdbに先行して、データレイクからIceberg形式のファイル の読込み/書出しに対応。 ⚫ 同社が開発中のpg_parquetがOSSとして公開されている。 https://www.crunchydata.com/blog/how-we-fused-duckdb-into-postgres-with-crunchy-bridge-for-analytics
  • 23. © 2024 NTT DATA Group Corporation 24 03. まとめ
  • 24. © 2024 NTT DATA Group Corporation 25 HTAP向けPostgreSQL:最近の流れ Citus AlloyDB pg_parquet pg_duckdb • シングルフォーマット • カラムナストアは追記のみ • カラムナキャッシュ、高速ディスクキャッシュ • デュアルフォーマット • ストレージ外部化 • データレイク連携 2020 2021 2022 2023 2024 ⚫ HTAP適応ではデータレイク連携が主流になる可能性あり。