Database design 模式和表与使用PostgreSQL的单个表中的用户ID

Database design 模式和表与使用PostgreSQL的单个表中的用户ID,database-design,postgresql,Database Design,Postgresql,我正在开发一个web应用程序,在数据库结构方面我已经走到了一个岔路口,我不知道该朝哪个方向走。我有一个包含用户信息的数据库,我可以通过以下两种方式之一进行设计。第一种方法是为每个用户创建一个模式和一组表(为每个用户复制结构),第二种方法是基于用户id创建一组表和查询信息。假设100000个用户 考虑到安全性、性能、可扩展性和管理,每个选择在哪里 答案会变为1000000还是10000 是否有一套最佳实践可供选择 在我看来,多个模式更安全,因为限制用户权限很简单,但是性能和可伸缩性呢?由于转储(和

我正在开发一个web应用程序,在数据库结构方面我已经走到了一个岔路口,我不知道该朝哪个方向走。我有一个包含用户信息的数据库,我可以通过以下两种方式之一进行设计。第一种方法是为每个用户创建一个模式和一组表(为每个用户复制结构),第二种方法是基于用户id创建一组表和查询信息。假设100000个用户

  • 考虑到安全性、性能、可扩展性和管理,每个选择在哪里
  • 答案会变为1000000还是10000
  • 是否有一套最佳实践可供选择

  • 在我看来,多个模式更安全,因为限制用户权限很简单,但是性能和可伸缩性呢?由于转储(和恢复)大量模式并不比转储少数模式更困难,因此管理似乎是一种洗礼。

    单独的模式将为您提供更多的隔离和潜在的更容易的安全性,因为您可以为每个sschema分配单独的db角色,并确保一个客户的访问权限不能为另一个客户的访问权限


    如果您有100000个用户,那么单独的模式实际上是不起作用的——如果这意味着您将有100000个模式的话。好吧,这是可行的,但该系统不是为处理那么多模式而设计的,而且您可能会遇到性能问题。因此,如果你有那么多用户,你就需要用另一种方式来做。单独的模式将为你提供更多的隔离和潜在的更容易的安全性,因为你可以为每个sschema分配一个单独的db角色,并确保一个客户的访问权限不能为另一个客户的访问权限


    如果您有100000个用户,那么单独的模式实际上是不起作用的——如果这意味着您将有100000个模式的话。好吧,这是可行的,但该系统不是为处理那么多模式而设计的,而且您可能会遇到性能问题。因此,如果您有那么多用户,那么您确实需要以另一种方式进行操作。

    为什么会导致性能问题?除了设置极端边缘案例测试之外,还有什么可以证明这一点吗?@JustBob实际上,已知的最大性能问题将出现在备份中,在备份中,大量的模式和关系会使pg_转储运行得非常缓慢。为什么会导致性能问题?除了设置极端边缘案例测试之外,还有什么可以证明这一点吗?@JustBob实际上,已知的最大性能问题将出现在备份中,在备份中,大量的模式和关系会使pg_dump运行非常缓慢。