【发布时间】:2010-11-25 23:24:04
【问题描述】:
我一直在阅读这个question,但这对我没有帮助。考虑到数据库管理,我认为一个具有多个模式的数据库比另一个选项更容易维护,但就性能而言,哪个更好?,一个比另一个有什么优势吗?
TIA。
【问题讨论】:
标签: database database-design postgresql
我一直在阅读这个question,但这对我没有帮助。考虑到数据库管理,我认为一个具有多个模式的数据库比另一个选项更容易维护,但就性能而言,哪个更好?,一个比另一个有什么优势吗?
TIA。
【问题讨论】:
标签: database database-design postgresql
如果性能很重要,那么对您的特定用例进行基准测试是无可替代的。如果它不是那么重要,那么使用更容易管理!与程序员/DBA 时间相比,硬件便宜,并且与更复杂设置的预期更高事故率相比。更不用说计算机遵循摩尔定律,但日子固执地拒绝变长。
如果我不得不猜测,没有对您的特定用例进行基准测试(因为我不能),我猜一个具有多个模式的数据库会更好地执行,因为:
每个连接都指向一个数据库,AFAIK。 PostgreSQL 中的连接设置/拆卸成本很高。
与许多数据库相比,许多模式更接近于许多表,我希望许多表的优化程度超出我对许多数据库的预期。
但是,我可以看到一个可能适用的反例。每个数据库都存储在一个目录中。这使得使用普通文件系统工具(例如,挂载点和/或符号链接)非常容易地跨文件系统(以及磁盘阵列)拆分数据库。跨多个阵列拆分数据库不太可能胜过具有相同磁盘数量的更大 RAID10 阵列,但会提供更好的隔离(数据库 A 执行大量查询不会对数据库 B 产生太大影响)。但是,请检查您的操作系统的 IO 调度程序文档;请记住,每个 PostgreSQL 连接都有自己的后端进程,因此每个进程的公平排队可能会更好地完成此任务。
请注意,您还可以使用 PostgreSQL 的 CREATE TABLESPACE 和朋友来跨文件系统分割数据,因此上述操作实际上也可以使用模式完成。
【讨论】:
性能方面,它将完全取决于您的应用程序。
例如,多个数据库需要每个数据库的连接池。如果您有数百或数千个数据库,这几乎意味着您无法进行连接池。除了与数据库的单个持久连接的客户端应用程序之外,这将降低您的性能。
但是,如果您“一次只访问一个数据库”(而且彼此之间也不在几秒钟内),则将内容保存在单独的数据库中只需要为正在使用的数据库加载系统表缓存,留出更多内存来缓存用户表(因为每个数据库中的系统表会小很多)。
在大多数情况下,一个数据库中的模式会胜出。一个相当常见的解决方案是混合 X 数据库和 Y 模式。
【讨论】:
我认为这两种方式都不重要。每个表都将存储在一个单独的文件中,唯一的问题是文件所在的目录。由于性能主要受对单个文件的读写操作的影响,因此目录中文件的组织应该没有什么影响。
【讨论】:
与我可以看到的多个模式(命名空间)相比,多个数据库没有性能优势(除非您有非常多的表)。 CREATE TABLESPACE 允许您将任何您想要的内容放在文件系统上的任何位置,因此无论哪种情况,您都可以控制物理存储。
主要区别在于跨多个模式进行查询时,它比跨多个数据库查询要好得多。此外,如果所有连接都在同一个数据库中,您也许可以通过连接池共享更多连接。
【讨论】: