ruby-on-rails - 单个 Postgres 数据库中可以存在 20,000 个模式吗?

标签 ruby-on-rails postgresql multi-tenant

单个 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/

相关文章:

django - 在线程中使用 Django ORM 并通过使用 BoundedSemaphore 避免 "too many clients"异常

java - Hibernate 空间查询异常,但在 postgres 控制台中正常工作

postgresql - Adminer & Migrate 无法连接到 Postgresql Docker 容器

graphql - 如何处理 graphql 服务器中的 Multi-Tenancy ? Apollo/Prisma/Hasura 什么有这个 pugin?

ruby-on-rails - 设计 after_sign_in_path_for 有效,但不会发生重定向

ruby-on-rails - 如何将方法添加到 activerecord 集合?

ruby-on-rails - Rails 4 Assets 管道丢失供应商 Assets

mysql - 如何使用 mysql 每天处理数百万条记录

node.js - Mongoose Multi-Tenancy - 处理文档引用+填充

asp.net - 在 Orchard 中的租户之间共享默认网站内容