Postgresに何千人ものユーザーを抱えることは可能ですか?


9

最大50.000の顧客を持つSAASを作成しています。Postgresデータベースに顧客ごとにユーザーを作成することを検討しています。サービスにログインする各ユーザーをデータベース内のユーザーにマップして、ユーザーが自分のデータにのみアクセスできることを確認します。また、トリガーを利用するこのソリューションによって、監査証跡をデータベースに直接実装したいと考えています。各顧客に独自のデータベースユーザーがいる場合、2人の顧客が同じデータを共有する場合でも、誰が何をしたかを簡単に確認できます。

データベースに50.000人のユーザーがいるため、予期しない問題が発生しますか?パフォーマンス面または管理面。たぶん接続プーリングはもっと難しいでしょうが、私はそれが必要になるかどうか本当に知りません。


2
DB authを使用している場合、接続プーリングを実行することはできませんか?パフォーマンスにとって重要な問題は、DB内のユーザー数ではなく、同時接続の数とそれらが使用しているリソースの量です。
ジャックは、topanswers.xyzを2015年

2
@JackDouglasはい、接続プーリングを使用できます。次に「commonUser」として接続しますset role actualUser
Neil McGuigan

2
@ニールは確かですが、それはDB認証ではありません。データベースユーザーのパスワードを使用して認証する場合は、postgresで何らかの外部認証を使用する必要があります。
ジャックはtopanswers.xyzを2015年

2
@JackDouglas正解です。dbauthではなくプロキシ認証です。
Neil McGuigan、2015年

これまでの答えは、多数の同時ユーザーを想定していますが、これは事実でしょうか?
ジャックはtopanswers.xyzを2015年

回答:


12

はい、大丈夫です。ただし、pgは接続ごとにかなりの量のメモリを使用するため(約10MBのAFAIK)、接続プールを使用する必要があります。

ただし、ボックスごとに500を超える同時接続は問題になります(正確に同時にデータベースにクエリを実行するなど)。CPU /コアが多いほど良いです。RAID 10でSSDを使用します。

SaaSアプリケーションは、1人のユーザーとして接続してset roleから、実際のユーザーに接続する必要があります。接続文字列は同じですが、異なるユーザーを使用するため、接続プールを使用できます。reset role接続をプールに戻すときに、必要があります。

これは実際にはデータベース認証ではありません。プロキシ認証(別名偽装)です。

また、会社ごとまたは役割ごとに個別のプールを検討することもできます。

管理を簡単にするために、ユーザーをグループに入れ、グループを介して権限を設定できます。これはRBACと呼ばれます。

更新:2.4秒で50,000人のユーザーを作成できました。ユーザーの数が原因で、PGAdminは著しく遅くなります。ただし、JDBC経由の接続は以前と同じくらい高速です。一度に50,000人のユーザーを削除することはできませんでしたが、一度に約10,000人を削除することができました。


研究をありがとうございました。PGAdminで作業することは可能でしたか?そこでのパフォーマンスに大きな問題はありましたか?
David

@David PGAdminは大丈夫だった、ただ遅い。psqlで問題ありません。PGAdminを調整してスピードアップできるかもしれません。
Neil McGuigan、2015年

2

パフォーマンス:数千の同時接続はメモリを消費します。およそ1,000を超える同時接続では、接続プールを使用することをお勧めします。pgbouncerはskypeによって開発された優れたものです。

管理:50,000人のユーザーを管理することは、IMOの大きな仕事になります。application_nameそれぞれの衣装担当者が同じユーザー名を使用してデータベースに接続するように、異なるを使用して同じデータアクセスを持つ衣装担当者を区別するのはどうですか。

例:

別のユーザー名を使用して、各クライアントの接続文字列は次のようになります--user user1--user user2など

しかし、別のを使用してapplication_name、各クライアントの接続文字列は次のようになります--user user1 --application_name costumer1--user user1 --aplication_name costumer2など

application_name記録されているpg_stat_activityともログに記録することができます。それを実装する方が簡単だと思います。また、application_name適用する監査トリガーにも記録されます。詳細はこちら

それが役に立てば幸い。


4
50,000のdbユーザーを50,000のアプリユーザーよりも管理するのはどうですか?
Neil McGuigan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.