我一直在阅读这个问题,但是它并没有帮到我。考虑到数据库管理,我认为一个具有多个模式的数据库比另一个选项更容易维护,但就性能而言,哪个更好呢?是否有一种选项优于另一种?
TIA。
如果性能很重要,那么除了基准测试你的特定用例之外,没有其他替代品。如果不是那么重要,那么就选择更容易管理的东西吧!与程序员/数据库管理员时间相比,硬件便宜,而且相对于更复杂的设置预期发生更高的事故率。更不用说电脑遵循摩尔定律,但一天的时间仍然固执地不变。
如果我必须猜测(因为我无法基准测试你的特定用例),我会猜测具有多个模式的一个数据库将表现更好,因为:
据我所知,每个连接都是到一个数据库的。在PostgreSQL中建立/拆除连接是昂贵的。
许多模式更接近许多表而不是许多数据库,并且我预计许多表将被优化,而不是许多数据库。
然而,我可以看到可能适用的反例。每个数据库都存储在一个单独的目录中。这使得使用普通文件系统工具(例如,挂载点和/或符号链接)轻松地跨文件系统(因此跨磁盘阵列)分割数据库。将数据库跨多个阵列分割非常不可能优于具有相同数量磁盘的较大的RAID10阵列,但会提供更好的隔离性(执行巨大查询的数据库A不会像以前那样对数据库B产生影响)。然而,请检查您的操作系统的IO调度程序文档;请记住,每个PostgreSQL连接都会获得自己的后端进程,因此每个进程的公平排队可能会更好地实现这一点。
请注意,您还可以使用PostgreSQL的CREATE TABLESPACE
和相关功能将数据划分到文件系统中,因此上述内容也适用于模式。
我认为这并不重要。每个表都将存储在单独的文件中,唯一的问题是文件所在的目录。由于性能主要受到对单个文件的读写操作的影响,因此文件在目录中的组织应该没有太大影响。
我认为,多个数据库与多个模式(命名空间)相比没有性能优势(除非您有大量表格)。CREATE TABLESPACE
允许您将任何内容放置在文件系统的任何位置,因此在任一情况下都可以由您控制物理存储。
主要区别在于当您跨多个模式查询时,它比跨多个数据库查询要好得多。此外,如果所有内容都在同一个数据库中,则可以通过连接池共享更多连接。