2009-09-06 107 views

回答

12

如果性能很重要,那么就不能用基准测试您的特定用例。如果不那么重要,那么就更容易管理!与编程器/ DBA时间相比,硬件便宜,并且与更复杂设置中的预期更高事故率相比较。更不用说电脑遵循摩尔定律,但这一天固执地拒绝延长。

如果我不得不猜测,具有不基准您的特定使用案例(因为我不能),我猜一个数据库有多个架构将性能更好的原因是:

  1. 每连接到一个数据库AFAIK。在PostgreSQL中连接建立/拆卸是很昂贵的。

  2. 许多模式比许多数据库更接近许多表,我希望很多表优化的次数比我预期的要多。

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

请注意,您还可以使用PostgreSQL的CREATE TABLESPACE和朋友在文件系统之间对数据进行细分,因此上面实际上也可以使用模式来完成。

+0

“创建TABLESPACE和朋友,所以上面实际上也可以使用模式来完成。”是的,我认为使用许多数据库没有任何性能优势。顺便说一句,我不明白RAID与这个问题有什么关系。无论数据库与模式问题如何,您都可以随时随地使用表空间。 – 2009-09-06 16:37:54

+0

@Jeff Davis:是的,你可以,使用标准的Unix工具,而不是SQL命令,可以更容易地处理多个数据库。关于RAID的一点是,通过将所有这些磁盘添加到RAID10,您通常可以获得比仔细分割磁盘更好的性能。 – derobert 2009-09-06 19:31:28

0

我认为这不重要。每个表格将存储在一个单独的文件中,唯一的问题是文件所在的目录。由于性能主要受到对单个文件的读写操作的影响,因此目录中文件的组织应该几乎没有影响。

2

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

例如,多个数据库需要每个数据库的连接池。如果您拥有数百或数千个数据库,那么这意味着您无法进行连接池。除了说一个具有到数据库的单一持久连接的客户端应用程序之外,任何事情都会让你付出代价。但是,如果您只能一次访问“一个数据库”(而且彼此之间不存在几秒钟),则将事物保存在不同的数据库中将只需要为正在使用的数据库加载系统表缓存,留下更多的内存来缓存用户表(因为每个数据库中的系统表将显着更小)。

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

0

多个数据库比我看到的多个模式(名称空间)没有性能优势(除了可能如果您有一个令人难以置信的大量表)。 CREATE TABLESPACE允许你在文件系统中随心所欲地放置任何你想要的东西,这样在任何情况下都可以控制物理存储。

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