多テナントについて話すとき、アパートのビルを想像できます。 🏢 このビルには、さまざまなアパート🏠(テナント)があり、それぞれのアパートは独立しており、自分のスペースとプライバシーを持っていますが、同じビルのインフラ(エレベーター、水道、電気など)を共有しています。 ソフトウェアの分野では、多テナントは、同じソフトウェアシステム内で複数の異なるユーザー(テナント)にサービスを提供することを可能にするアーキテクチャパターンを指します。各ユーザーは相互に隔離されており、アパートの住人のようです。
- なぜ PostgreSQL は多テナントを必要とするのか? 🤔
PostgreSQL は多テナントの能力をサポートする必要があります。なぜなら、多くのアプリケーションが複数のユーザーにサービスを提供する必要があり、これらのユーザーは独立したデータストレージスペースを必要とするからです。 🛠️ 多テナントアーキテクチャを通じて、PostgreSQL は異なるユーザーのデータを隔離して保存し、データの安全性とプライバシーを確保できます。 🔒
- なぜ各ユーザーに PostgreSQL を開設しないのか? 🤨
各ユーザーに独立した PostgreSQL データベースを開設すると、リソースの浪費と管理の複雑性が増します。 📈 多テナントアーキテクチャを使用することで、データベースリソースをより効率的に利用し、コストを削減し、管理を簡素化できます。 🔄 さらに、多テナントアーキテクチャはシステムのスケーラビリティと柔軟性を向上させることができます。 💡
- なぜ SAAS は多テナントを必要とするのか? 🌐
ソフトウェア・アズ・ア・サービス(SAAS)モデルでは、サービスプロバイダーは複数のクライアントに統一されたソフトウェアサービスを提供する必要があります。各クライアントは組織、企業、または個人である可能性があります。 🤝 多テナントアーキテクチャを使用することで、異なるクライアント間のデータの隔離と安全性を実現し、各クライアントのために個別のシステムインスタンスを維持する必要がなくなり、運用の複雑性とコストを削減できます。 💻
予備知識 📚
手元に docker があり、以前に PG を学んだことがあり、一定の SQL 基礎があり、トリガーとは何か、関数とは何かを理解しています。
トリガー
テスト環境の構築#
psql -U postgres
を使用してデータベースに接続します。
User と Access テーブルがあると仮定します#
トリガーの新規作成#
- 現在の挿入ユーザーの ID を取得します。
- access テーブルにレコードを挿入します。
テスト
問題なさそうです。
多テナントの作成を開始します#
トリガーを新規作成します。
Accesses に挿入する際に、新しいユーザーを作成し、それにバインドされたスキーマを作成します。
各アクセスのためにユーザーを作成します#
テスト
\du
を使用してユーザーを確認します。
問題なさそうです。
スキーマを作成し、権限を付与します#
テスト
\dn
を使用してスキーマを確認します。
自分でログインしてみることができますが、ここでは詳しくは説明しません。
Accesses が更新されると、ユーザーパスワードを同期更新します#
自分でログインしてみて、古いパスワードでは入れないことを確認してください。
Accesses のレコードが削除されると、ユーザーを同期削除します#
テスト
結論#
これは単純な多テナントの実装に過ぎません。実際のアプリケーションでは、より複雑になる可能性があります。たとえば、より多くの権限管理、データ隔離などが必要です。 🌟 しかし、この例を通じて、PostgreSQL のトリガーと関数を使用して最も基本的な多テナント機能を実現する方法を理解できるでしょう。さらに深く掘り下げたい場合は、以下の機能を確認してください。