sna*_*hor 14 database postgresql database-design
我一直在读这个问题,但它对我没有帮助.考虑到数据库管理,我认为一个具有多个模式的数据库比其他选项更容易维护,但就性能而言哪个更好?哪一个有优势?
TIA.
der*_*ert 12
如果性能很重要,则无法替代对特定用例进行基准测试.如果它不那么重要,那么请更容易管理!与程序员/ DBA时间相比,硬件便宜,并且与更复杂的设置上的预期更高的事故率相比.更不用说计算机遵循摩尔定律,但这一天固执地拒绝延长.
如果我不得不猜测,没有对您的特定用例进行基准测试(因为我不能),我猜测一个具有多个模式的数据库会表现更好,因为:
每个连接都是一个数据库AFAIK.PostgreSQL中的连接设置/拆卸很昂贵.
许多模式比许多数据库更接近许多表,并且我希望许多表的优化程度超过我预期的许多数据库.
但是,我可以看到一个可能适用的反例.每个数据库都存储在一个目录中.这使得使用普通文件系统工具(例如,挂载点和/或符号链接)在文件系统(因此磁盘阵列)之间拆分数据库非常容易.跨多个阵列拆分数据库不太可能胜过具有相同磁盘数量的一个更大的RAID10阵列,但会提供更好的隔离(执行大量查询的数据库A不会对数据库B造成太大影响).但是,请检查操作系统的IO调度程序文档; 请记住,每个PostgreSQL连接都有自己的后端进程,因此每进程公平排队可以更好地完成此任务.
请注意,您还可以使用PostgreSQL CREATE TABLESPACE和朋友对文件系统中的数据进行分段,因此上述实际上也可以使用模式完成.
在性能方面,这将完全取决于您的应用程序。
例如,多个数据库需要每个数据库的连接池。如果您有数百或数千个数据库,那几乎意味着您无法进行连接池。除了与数据库具有单个持久连接的客户端应用程序之外,这将降低您的性能。
但是,如果您只访问“一次一个数据库”(并且彼此之间也不在几秒钟内),那么将事物保存在单独的数据库中将只需要为正在使用的数据库加载系统表缓存,从而留下更多内存缓存用户表(因为每个数据库中的系统表会小很多)。
在大多数情况下,一个数据库中的模式会胜出。一个相当常见的解决方案是 X 数据库和 Y 模式的混合。