在 Postgres 中拥有数千个用户是否可行?

Dav*_*vid 9 postgresql performance users connection-pooling

我们正在创建 SAAS,我们最多将拥有 50.000 名客户。我们正在考虑在 Postgres 数据库中为每个客户创建一个用户。我们会将登录我们服务的每个用户映射到数据库中的用户,以确保他们只能访问自己的数据。我们还希望通过此解决方案直接在数据库中实施审计跟踪,它利用触发器。如果每个客户都有自己的数据库用户,那么即使两个客户共享相同的数据,也很容易看出谁做了什么。

因为我们的数据库中有 50.000 个用户,我们会遇到一些意想不到的问题吗?性能方面或管理方面。也许连接池会更困难,但我真的不知道我们是否需要它。

Nei*_*gan 13

是的,应该没问题。不过,您应该使用连接池,因为 pg 每个连接使用相当数量的内存(大约 10MB AFAIK)。

每个盒子超过 500 个同时连接将是一个问题(比如在完全相同的时间主动查询数据库)。更多的 CPU/内核更好。将 SSD 与 RAID 10 配合使用。

您的 SaaS 应用程序应该作为一个用户连接,然后连接set role到真实用户。这允许您使用连接池,因为连接字符串将相同,但使用不同的用户。您应该reset role在将连接返回到池时。详情在这里

这不是真正的数据库身份验证。它是代理身份验证(又名模拟)。

您还可以考虑为每个公司或每个角色设置单独的池。

为了使管理员更容易,您可以将用户分组并通过组设置权限。这称为 RBAC。

更新:我能够在 2.4 秒内创建 50,000 个用户。由于用户数量的原因,PGAdmin III 明显变慢。但是通过 JDBC 连接和以前一样快。我无法一次删除 50,000 个用户,但一次可以删除大约 10,000 个。