Slide 1

Slide 1 text

スケールアウトできる Managed RDBMS Azure Cosmos DB for PostgreSQL 2022/11/17 – 第41回 JAZUG Night 株式会社 pnop / Cloudlive 株式会社 浅見 城輝

Slide 2

Slide 2 text

♥BEER About me kuniteru.asami Find me Database Microsoft Azure 2012~ Microsoft Azure

Slide 3

Slide 3 text

株式会社pnop 株式会社 pnop は Microsoft Azure に関する課題解決のプロフェッショナル集団です。 皆様のプロジェクトに、 Azure経験豊富なエンジニアがノウハウを提供いたします。 Azure アーキテクチャ 設計相談 Azure 運用設計 相談 Azure開発 Azure 環境構築 Azure トラブル シューティング Azure トレーニング 新規システムを Azureで稼働させしたい 既存システムを Azureに移行したい パッケージ・ソリューションをAzure に対応したい Azureを利用することで システムコストを下げたい Azureで安全・安心な システムを提供したい Azureを利用することで 運用担当者の負担を軽減したい Azureを利用しているうえで 困っていることを解決したい Azureのスキルを向上したい Azureに関するご相談・お問い合わせ:[email protected] https://www.pnop.co.jp

Slide 4

Slide 4 text

注意事項 このスライドは 2022 年 11 月 17 日 時点の情報を 基にしています

Slide 5

Slide 5 text

Agenda Azure Cosmos DB for PostgreSQL とは Citus のテーブル型

Slide 6

Slide 6 text

Azure Cosmos DB for PostgreSQL とは

Slide 7

Slide 7 text

分散クエリ実行や 高性能なスケールアウトを備えた フルマネージドな PostgreSQL

Slide 8

Slide 8 text

特徴 スケールアウトできる RDBMS 並列化による 20 倍 から 300 倍以上の 高パフォーマンス グローバル レプリケーション 列指向ストレージ対応 Citus エクステンション フルマネージド ネイティブ PostgreSQL

Slide 9

Slide 9 text

ベンチマーク https://techcommunity.microsoft.com/t5/azure-database-for-postgresql/how-to-benchmark-performance-of-citus-and-postgres-with-hammerdb/ba-p/3254918

Slide 10

Slide 10 text

アーキテクチャ 一つの Coordinator ノードと、複数の Worker ノードで構成される Coordinator ノード クライアントアプリケーションからの接続を受け付ける 分散テーブルや参照テーブルのメタデータと通常のテーブルやその他の PostgreSQL オブジェクトを保持 分散テーブル、参照テーブルの要求を受けた場合は、対象の Worker ノードに SQL クエリを送信 Worker ノード 通常の PostgreSQL テーブルとして分散テーブル、参照テーブルのデータを保持 https://github.com/citusdata/citus

Slide 11

Slide 11 text

Citus のテーブル型 分散テーブル 参照テーブル ローカル テーブル

Slide 12

Slide 12 text

分散テーブル 分散テーブルは、テーブル毎にシャードキー列を指定してユーザーが作成する デフォルトでは 32 のシャードに分割され、Worker ノードに格納される シャード数が Worker ノード数の倍数ではない場合、ノードによってシャード数は異なる SELECT create_distributed_table('table_name', 'distribution_column'); https://www.citusdata.com/product#citus-diagram

Slide 13

Slide 13 text

分散テーブルの併置(コロケーション) 異なる Worker ノードをまたいだ Join 操作はできない それを避けるため、異なるテーブル間で、シャードキー値が 同じ場合、同一の Worker ノードに配置させることにより、 Worker ノード内で Join を済ませることができる https://learn.microsoft.com/ja-jp/azure/cosmos-db/postgresql/quickstart-build-scalable-apps-concepts#colocation

Slide 14

Slide 14 text

参照テーブル すべての Worker ノードに全データが複製されるテーブル ディメンションテーブル(マスタテーブル)に向いている Worker ノードに参照テーブルを作成する SELECT create_reference_table('table_name'); ローカル テーブル 分散テーブルにも参照テーブルにもしていないテーブルは、 Coordinator ノードで通常の PostgreSQL テーブルとなる ローカルテーブルと分散テーブルとの Join 操作は可能

Slide 15

Slide 15 text

スケールアウト スケールアウトして Worker ノードを増やしても、 自動では分散テーブルの再配置はされないため、 ユーザー(DB管理者)自身で再配置を実施する オンラインで再配置を実行でき、他のトランザクションが ブロックされるのはメタデータを更新する一瞬だけ SELECT rebalance_table_shards('table_name');

Slide 16

Slide 16 text

まとめ Azure Cosmos DB for PostgreSQL は、分散クエリ実行や 高性能なスケールアウトを備えたフルマネージドな PostgreSQL 分散クエリやスケールアウトの恩恵を受けるには、テーブル毎 に設定が必要 パフォーマンスを上げるために、分散テーブルのシャードキー を何にするかが重要 異なる Worker ノードをまたいだ Join 操作はできないため、 コロケーション(併置)をする スケールアウトしたら、分散テーブルの再配置を実施する

Slide 17

Slide 17 text

参考資料 Azure Cosmos DB for PostgreSQL documentation https://learn.microsoft.com/ja-jp/azure/cosmos-db/postgresql/ citusdata https://www.citusdata.com/ GitHub - citusdata / citus https://github.com/citusdata/citus Azure Cosmos DB: Liftoff https://learn.microsoft.com/en-us/events/azure-cosmos-db-liftoff/ Citus Con: An Event for Postgres 2022 https://www.citusdata.com/cituscon/2022/schedule

Slide 18

Slide 18 text

http://www.pnop.co.jp/