マルチテナント アプリケーションと、これにPostgreSQLのスキーマを使用する方法について学習しています。
主題を調査して、私は 記事 を見つけました。この記事では、マルチテナントアプリケーションでPostgreSQLのスキーマを使用したときの経験が乏しいと著者が説明しています。主な問題は、移行のパフォーマンスが低下し、データベースリソースが大量に使用されることです。
スキーマを1つだけ持つ(テナント間でテーブルを共有する)と、テナントごとに1つのスキーマを分けるよりもパフォーマンスが向上するようです。しかし、私には奇妙に感じます。小さいテーブルのインデックスは大きいテーブルのインデックスよりも軽い傾向があるため、私は反対を考えるでしょう。
多数の小さなテーブル(複数のスキーマ)でデータを分離する場合、いくつかの巨大なテーブル(単一のスキーマ)でデータを分離するよりも、パフォーマンスが低下するのはなぜですか?
パフォーマンスは必ずしも悪くありません。この記事で説明しているように、アプリケーションの設計とワークロードに応じて、スキーマアプローチを改善または悪化させる特定の条件があります。 「テナントスキーマ」アプローチと「共有テーブル」アプローチのトレードオフについて説明します。
tenant-schemaは、比較的少数のかなり大きなテナントがある場合に最適です。この例としては、有料のサブスクリプションユーザーのみがいる会計アプリケーションがあります。あなたにとってより良いパフォーマンスのオプションとなるものは次のとおりです。
パフォーマンスの低いオプションとなるものには次のものがあります。
テナントスキーマが移行/スキーマの変更に悪いかどうかは、実際にそれらをどのように行っているかによって異なります。ユニバーサルスキーマの変更を迅速に展開することは悪いことですが、テナント間の段階的なロールアウトとしてスキーマの変更を展開するには適しています。
shared-tableは、テナントが多く、テナントのデータがほとんどない場合に適しています。この例は、無料のアカウントを許可するため、数千のアカウントを放棄したソーシャルメディアモバイルアプリケーションです。共有テーブルモデルを有益にする他の要素は次のとおりです。
共有テーブルの主な欠点は、アプリケーションレイヤーのすべてのクエリにテナントフィルター条件を追加する必要があることです。次の理由も問題です。
そのため、どのモデルが「より良いパフォーマンス」を発揮するかは、どのトレードオフが最悪の結果になるかによって異なります。
また、実際のデータが共有テーブルに保存されるハイブリッドモデル「テナントビュー」もありますが、各アプリケーション接続では セキュリティバリアビュー を使用してデータを表示します。これには、各モデルのいくつかのトレードオフがあります。主に、テナントスキーマモデルのセキュリティ上の利点と、両方のモデルのパフォーマンス上の欠点のいくつかがあります。