单个Postgres数据库中是否可以存在20,000个模式?

时间:2013-07-23 18:14:55

标签: ruby-on-rails postgresql multi-tenant

单个Postgres数据库可以包含超过20,000个架构吗?这种数据库设计有什么含义。

我在这里阅读有关postgres架构的内容 - http://www.postgresql.org/docs/8.2/static/ddl-schemas.html,我计划在我的多租户Ruby on Rails应用程序中为每个帐户创建一个架构。每个模式都有一组表来存储相关帐户的数据。

我们提供的所有功能的每个用户/架构可以有50-60个表。

如果我分配一个大型EC2实例来托管数据库服务器,postgres可以在没有任何打嗝的情况下处理所有这些吗?

[更新]

根据经验,如果任何人在postgres中遇到这么多模式的问题,他们可以分享,我想我可以得到更多的指导,以避免这些陷阱。

2 个答案:

答案 0 :(得分:3)

可以在一个PostgreSQL数据库中创建20,000个模式,但这并不是说这是一个好主意。

首先,从设计的角度来看,如果要向表中添加新列,则需要更新20,000个表。另外 - 如果你想查看所有用户的总数,那就是你要编写的20,000表联合 - 不是很漂亮。

其次,历史上肯定存在大量模式和表格的问题。不是从个别查询的角度来看,而是从查询系统目录的任何事情。某些系统视图和函数具有简单的实现,可以在100个表中正常工作,但对于10,000个表来说非常慢。这并不总是一件坏事 - 为什么99%的用户会在你工作的时候使核心功能复杂化?

在系统目录中进行了一些小的调整,以推高尝试进行设计的人的限制。但限制将取决于您的使用模式。自从我查看ActiveRecord或其任何亲属以来已经有一段时间了,但在开发模式下,它一直用于查询目录以检查表定义 - 这可能很痛苦。但是在生产中,启动缓慢后可能没有问题。

我没有看到EC2的内容在这里很重要 - 只要你有满足你需求的CPU和RAM。

所以 - 总结:

  • 可以做到
  • 奇数角将显示O(n 2 )而不是O(n log n)性能,其中20,000个模式将是显而易见的。

查看postgresql.org邮件列表档案,以便以前对此进行讨论 - 如果您真的需要详细信息,那么这就是您要去的地方。

答案 1 :(得分:0)

你在这里问了三个问题,但是底线问题似乎是如果我分配一个大的EC2实例来托管数据库服务器,那么postgres可以处理[20,000个模式]而没有任何打嗝吗?

还有很多变量涉及回答这个问题,包括确切的实例有多大,你选择的EBS存储的性能水平,RAID选项,文件系统选择,数据量是每个架构,服务器获得了多少流量,以及它是什么类型的流量。

您的特定设计的运行容量测试无法替代,看它是否真的有效。我认为,通过提出具体问题,您将获得的答案将比目前提供的最少信息提供的任何其他建议更有价值。

关于是否存在20,000个模式的初始问题 - 创建一个简单的循环并自己测试这个想法,看看会发生什么。