postgresql 多租户模式与数据库

red*_*guy 4 database postgresql database-design multi-tenant database-schema

我们设计了一个多租户系统(假设有数百个租户,而不是数千个)。没有共享数据。数据库是PostgreSQL。为每个租户或架构创建一个单独的数据库是否更好?

优缺点都有什么?对文件系统、数据库引擎表/视图(如锁、对象权限等)有何影响?在多模式解决方案中它们会更大吗?单独的数据库应该更容易备份/恢复。

我知道有很多类似的问题,但大多数都与共享数据的情况有关,这是多个数据库的主要缺点,而我们没有这样的要求。

小智 5

如果您不需要在单个查询中使用来自多个租户的表,我会选择单独的数据库。

查询的原始速度并没有真正受到此影响,对文件系统或内存的影响也没有。

然而,对于许多模式和许多表(但我们在这里谈论的是数十万),查询优化器往往会变得更慢。在这种情况下,制表符补全的psql效率也不高。

将 pg_dump/pg_restore 与单独的数据库一起使用比与单独的模式一起使用要容易一些。

但这是一条模糊的界限,实际答案很可能基于个人意见和偏好。

  • 我看到的唯一问题是java中的连接池支持同一池中的不同用户名,但不支持不同的数据库。有了这个限制,您需要每个数据库单独的池,并且如果您选择每个租户的数据库,则需要按租户单独的池。如果涉及保持活动状态的连接数量(空闲但无论如何),它看起来不太好。我正在考虑某种混合方法,或者可能根本不使用连接池,因为在大多数情况下创建连接并不那么耗时 (3认同)