单个 Postgres 数据库可以包含超过 20,000 个模式吗?这种数据库设计的含义是什么。
我在这里阅读有关 postgres 模式的信息 - http://www.postgresql.org/docs/8.2/static/ddl-schemas.html我计划在我的 Multi-Tenancy Ruby on Rails 应用程序中为每个帐户创建一个模式。每个模式都有一组表来存储相关帐户的数据。
我们提供的所有功能的每个用户/模式可能有 50-60 个表。
如果我分配一个大型 EC2 实例来托管数据库服务器,postgres 能否顺利处理所有这些?
[更新]
根据经验,如果有人在 postgres 中遇到如此多的模式问题,他们可以分享,我想我可以获得更多指导来避免此类陷阱。
最佳答案
您可以在单个 PostgreSQL 数据库中创建 20,000 个模式,但这并不是说这是个好主意。
首先,从设计的角度来看,如果要向表中添加新列,则需要更新 20,000 个表。另外 - 如果您想查看所有用户的总计,那么您将不得不编写一个包含 20,000 个表的联合 - 不太漂亮。
其次,从历史上看,大量模式和表确实存在一些问题。不是从单个查询的角度来看,而是从查询系统目录的任何角度来看。某些系统 View 和函数有一个简单的实现,它适用于 100 个表,但对于 10,000 个表来说非常慢。这并不总是一件坏事 - 为什么要让 99% 的用户的核心功能复杂化,而当您的产品可用时?
在系统目录中进行了一些小的调整,以提高尝试您的设计的人的限制。不过,限制在哪里取决于您的使用模式。自从我查看 ActiveRecord 或其任何同类产品以来已经有一段时间了,但在开发模式下,它过去一直查询目录以检查表定义——这可能很痛苦。但在生产环境中,启动缓慢后您可能不会遇到问题。
我不认为 EC2 的东西在这里很重要 - 只要您拥有满足您要求的 CPU 和 RAM。
所以 - 总结:
- 可以做到
- 奇数角将显示 O(n2) 而不是 O(n log n) 的性能,这对于 20,000 个模式将是值得注意的。
检查 postgresql.org 邮件列表存档以获取之前对此的讨论 - 如果您真的需要详细信息,那是去的地方。
关于ruby-on-rails - 单个 Postgres 数据库中可以存在 20,000 个模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17817908/