Postgresql一个带有多个模式的数据库与一个模式的多个数据库

时间:2009-09-06 05:10:58

标签: database database-design postgresql

我一直在阅读question,但这对我没有帮助。考虑到数据库管理,我认为一个具有多个模式的数据库比其他选项更容易维护,但就性能而言哪个更好?哪一个比另一个更有优势?

TIA。

4 个答案:

答案 0 :(得分:12)

如果性能很重要,则无法替代对特定用例进行基准测试。如果它不那么重要,那么请更容易管理!与程序员/ DBA时间相比,硬件便宜,并且与更复杂的设置上的预期更高的事故率相比。更不用说计算机遵循摩尔定律,但这一天顽固地拒绝延长。

如果我必须猜测,没有对您的特定用例进行基准测试(因为我不能),我猜测一个具有多个模式的数据库将会表现更好,因为:

  1. 每个连接都是一个数据库AFAIK。 PostgreSQL中的连接设置/拆卸费用很高。

  2. 许多模式比许多数据库更接近许多表,我希望许多表的优化程度超过我预期的许多数据库。

  3. 但是,我可以看到一个可能适用的反例。每个数据库都存储在一个目录中。这使得使用普通文件系统工具(例如,挂载点和/或符号链接)在文件系统和磁盘阵列之间拆分数据库非常容易。跨多个阵列拆分数据库不太可能胜过具有相同磁盘数量的一个更大的RAID10阵列,但会提供更好的隔离(执行大量查询的数据库A不会对数据库B造成太大影响)。但是,请检查操作系统的IO调度程序文档;请记住,每个PostgreSQL连接都有自己的后端进程,因此每进程公平排队可以更好地完成此任务。

    请注意,您还可以使用PostgreSQL的CREATE TABLESPACE和朋友对文件系统中的数据进行分段,因此上述内容实际上也可以使用模式完成。

答案 1 :(得分:4)

在性能方面,它完全取决于您的应用程序。

例如,多个数据库需要每个数据库的连接池。如果您有数百或数千个数据库,这几乎意味着您无法进行连接池。除了说客户端应用程序与数据库之间存在单个持久连接之外,这会让您的性能降低。

但是,如果您一次只能访问“一个数据库”(而不是彼此之间的数秒),那么将事物保存在单独的数据库中只需要为正在使用的数据库加载系统表缓存,留下更多内存来缓存用户表(因为每个数据库中的系统表将显着缩小)。

在大多数情况下,一个数据库中的模式将胜出。一个相当常见的解决方案是X数据库和Y模式的混合。

答案 2 :(得分:0)

我认为无论如何都不重要。每个表都将存储在一个单独的文件中,唯一的问题是该文件所在的目录。由于性能主要受单个文件的读写操作的影响,目录中文件的组织应该没什么影响。

答案 3 :(得分:0)

多个数据库与我可以看到的多个模式(名称空间)相比没有性能优势(除非你有非常多的表)。 CREATE TABLESPACE允许您在文件系统上随意放置任何内容,因此在任何一种情况下都可以控制物理存储。

主要区别在于您跨多个模式进行查询时,它比跨多个数据库查询要好得多。此外,如果它们都在同一个数据库中,您可以通过连接池共享更多连接。