1

一个 Postgres 数据库可以包含超过 20,000 个模式吗?这种数据库设计的含义是什么。

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

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

如果我分配一个大型 EC2 实例来托管数据库服务器,postgres 是否可以毫无问题地处理所有这些问题?

[更新]

根据经验,如果有人在 postgres 中遇到这么多模式的问题,他们可以分享,我认为我可以获得更多指导来避免这样的陷阱。

4

2 回答 2

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 邮件列表档案以了解先前的讨论 - 如果您真的想要详细信息,那就去那里。

于 2013-07-23T18:58:11.403 回答
0

您在这里问了三个问题,但最重要的问题似乎是,如果我分配一个大型 EC2 实例来托管数据库服务器,postgres 是否可以毫无问题地处理 [20,000 个模式]?

回答这个问题涉及更多变量,包括实例的大小、您选择的 EBS 存储的性能级别、RAID 选项、文件系统选择、每个模式的数据量,服务器正在获得多少流量,以及它是什么类型的流量。

对于您的特定设计,没有什么可以替代运行容量测试来查看它是否真的有效。我认为,您从提出的具体问题中得到的答案将比目前提供的最少信息所能提供的任何其他建议更有价值。

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

于 2013-07-23T18:34:43.730 回答