DUICUO

Citus 入門: Postgres を分散データベースに変換する

Citusとは何ですか?

Citus は、データとクエリをクラスター内の複数のノードに分散する、Postgres のオープンソース拡張機能です。Citus は Postgres の拡張機能(フォークではありません)であるため、Citus を使用すると Postgres も同時に使用することになります。最新の Postgres 機能、ツール、エコシステムを活用できます。

Citusは、シャーディング、分散SQLエンジン、参照テーブル、分散テーブルなどの機能を備えた分散データベースへとPostgresを変換します。並列処理、メモリ内データ量の増加、そしてより高いI/O帯域幅を組み合わせることで、CitusはマルチテナントSaaSアプリケーション、顧客向けリアルタイム分析ダッシュボード、そして時系列ワークロードのパフォーマンスを大幅に向上させます。

Citus を入手する 3 つの方法:

1. オープンソース: Citus オープンソース コードをダウンロードするか、GitHub の Citus リポジトリにアクセスできます。

https://www.citusdata.com/download

https://github.com/citusdata/citus

2. エンタープライズ ソフトウェア: Citus Enterprise は、Citus を手動で管理したい人向けに、24 時間 365 日のサポート付きのソフトウェア サブスクリプションとして利用できます。

3. マネージド データベース サービス: Citus は、Azure Database for PostgreSQL マネージド サービスに組み込まれたデプロイメント オプションである Hyperscale (Citus) として Azure 上で提供されます。

https://docs.microsoft.com/azure/postgresql/hyperscale

Citus はどこまで拡大できるでしょうか?

Citusは、ワーカーノードを追加することで水平方向に、ワーカー/コーディネーターをアップグレードすることで垂直方向にスケールします。実際に、Citusのお客様は以下のスケールを実現しており、さらに大きな成長の可能性を秘めています。

アルゴリア

  • 毎日5~10Bを摂取する

ヒープ

  • 7000億以上のイベント
  • 70ノードのCitusデータベースクラスタ上の1.4PBのデータ

チャートビート

  • 毎月26億行以上のデータを追加

ペックス

  • 毎日800億件の更新
  • 20 ノードの Citus データベース クラスタは、Google Cloud アプリケーションです。
  • 2.4TB RAM、1280コア、80TBデータ
  • …計画では45ノードまで拡大する予定です。

ミックスランク

  • 1.6 PBの時系列データ

Citusを使用するタイミング

マルチテナントデータベース

ほとんどのB2Bアプリケーションでは、データモデルにテナント、顧客、またはアカウントの概念が組み込まれています。このモデルでは、データベースは複数のテナントにサービスを提供し、各テナントのデータは他のテナントのデータとは分離されています。

Citus は、このワークロードに完全なSQLカバレッジを提供し、リレーショナルデータベースを10万テナント以上に拡張できます。また、マルチテナント向けの新機能も追加されています。例えば、Citus はテナント分離をサポートし、大規模テナントのパフォーマンス保証を提供し、テナント間のデータ重複を削減する参照テーブルの概念を備えています。

これらの機能により、テナントデータを複数のマシンにまたがって拡張し、CPU、メモリ、ディスクリソースを簡単に追加できます。さらに、複数のテナント間で同じデータベーススキーマを共有することで、ハードウェアリソースを効率的に活用し、データベース管理を簡素化できます。

マルチテナント アプリケーションにおける Citus の利点:

  • すべてのテナントを迅速に照会
  • アプリケーションではなく、データベース内のシャーディング ロジック。
  • 単一ノードの PostgreSQL インスタンスには、可能な範囲を超える量のデータが保存されます。
  • 高い同時実行性でもパフォーマンスを維持する
  • 顧客グループ全体にわたる迅速な指標分析
  • 新規顧客登録に対応できるよう簡単に拡張可能
  • 独立した大規模および小規模顧客のリソース使用状況

リアルタイム分析

Citusは、大規模データセットに対するリアルタイムクエリをサポートしています。これらのクエリは、急速に成長するイベントシステムや時系列データを扱うシステムでよく使用されます。ユースケースの例としては、以下のようなものがあります。

  • 1秒未満の応答時間を備えた分析ダッシュボード
  • 進行中のイベントに関する探索的な調査。
  • 大規模データセットのアーカイブとレポート
  • ファネル、セグメンテーション、同種グループ化クエリを使用してセッションを分析します。

Citus のメリットは、クエリ実行を並列化し、クラスター内の稼働データベース数に応じて線形にスケーリングできることです。リアルタイムアプリケーションにおける Citus の利点には、以下のようなものがあります。

  • データセットの増加に応じて 1 秒未満の応答時間を維持します。
  • 新しいイベントとデータのリアルタイム分析
  • 並列化されたSQLクエリ
  • SQLを放棄せずに水平スケーリング
  • 高い同時実行性でもパフォーマンスを維持する
  • クイックレスポンスダッシュボードクエリ
  • 物事をつなぎ合わせるのではなく、データベースを使用します。
  • 豊富なPostgreSQLデータ型と拡張機能

使用上の注意

Citus は PostgreSQL の分散機能を拡張しますが、すべてのワークロードを直接的に置き換えるものではありません。高性能な Citus クラスターを実現するには、使用するデータモデル、ツール、SQL 機能を慎重に検討する必要があります。

ツールと SQL 機能について考える良い方法は次のとおりです。ワークロードがここで説明したユースケースと一致し、サポートされていないツールまたはクエリに遭遇した場合は、通常、適切な回避策があります。

Citusが適していない場合

ワークロードによっては、堅牢な分散データベースを必要としない一方で、ワーカーノード間で大量の情報フローを必要とするものもあります。前者の場合、Citusは不要ですが、後者の場合、Citusのパフォーマンスは一般的に低くなります。以下に例を示します。

  • 単一ノードの Postgres インスタンスでアプリケーションをサポートでき、それを拡張したくない場合。
  • オフライン分析。リアルタイムのデータの取り込みやクエリは必要ありません。
  • 多数の同時ユーザーをサポートする必要のない分析アプリケーション
  • 大量のデータの要約ではなくETL結果を返すクエリ