【问题标题】:Can 20,000 schemas exist in a single Postgres database?一个 Postgres 数据库中可以存在 20,000 个模式吗?
【发布时间】:2013-07-22 23:28:59
【问题描述】:

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

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

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

如果我分配一个大型 EC2 实例来托管数据库服务器,postgres 能否顺利处理所有这些问题?

[更新]

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢。我会自己做测试。但是根据经验,如果有人在 postgres 中遇到这么多模式的问题,他们可以分享,我想我可以得到更多的指导来避免这样的陷阱。
    【解决方案2】:

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

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

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

    在系统目录中到处都进行了一些小调整,以提高尝试您的设计的人的极限。不过,限制在哪里取决于您的使用模式。自从我查看 ActiveRecord 或其任何类似产品已经有一段时间了,但在开发模式下,它一直在查询目录以检查表定义——这可能会很痛苦。但在生产环境中,启动缓慢后您可能不会遇到问题。

    我认为 EC2 的东西在这里并不重要 - 只要您的 CPU 和 RAM 满足您的要求。

    所以 - 总而言之:

    • 可以的
    • 奇数角将显示 O(n2) 而不是 O(n log n) 性能,这对于 20,000 个模式将是显着的。

    查看 postgresql.org 邮件列表档案以了解先前的讨论 - 如果您真的想要详细信息,那就去那里。

    【讨论】:

    • 是的。我将其总结为“它不会崩溃,但性能和管理会很糟糕,所以不要这样做。”
    • 感谢理查德。我们之所以要采用模式方式,是为了数据隔离,便于客户数据的恢复和备份。客户的特定表格可能会非常高。我们可以采用多数据库方法,但与在一个数据库中处理 20,000 个模式相比,维护 20,000 个数据库的复杂性非常高。正确的?很想听听你的意见。
    猜你喜欢
    • 2021-06-25
    • 2011-06-13
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    • 2017-03-25
    • 2015-05-10
    • 2011-02-21
    • 2022-11-16
    相关资源
    最近更新 更多