【发布时间】:2018-07-02 08:55:33
【问题描述】:
在过去的 2 年中,我们尝试了许多不同的数据库引擎和数据库样式来解决需要 NoSQL 和 RDBMS 包的特性的特定问题。我们选择了 RDBMS 和 Postgres。
我们已经对许多不同的场景进行了性能测试,结果表明 Postgres 一直都能很好地处理所有事情,但我们知道模拟不是生产,其他人在大规模数据库方面的经验大相径庭。
一个巨人与许多小型是一个老生常谈的论点,但我的问题是关于大规模适度硬件的效率(适度硬件开始于小型 linux VPS 机器,随着需求的增长变得越来越大)。
我们有一个表(5 列,2 个索引(1 个三向索引)),很容易超过 10 亿行。如果我们改为说 10 个(甚至 100k)个表,这会稀释服务器资源,因为由于表的数量过多,索引不能全部保存在 ram 中?如果数据被拆分,那么几乎所有 10k 表都将被读取/写入,因此没有特定的活动表。
在讨论分区时,由于所有分区都是热的,我认为这也将带来有限的好处,因为读/写活动的广泛传播。
所以我的问题是:“在资源有限的情况下,当数据在单个表中分区或拆分到多个表中时,Postgres 是否会变得效率低下。只有一个表索引和几乎所有的表索引可以提高效率吗?活动集中在表格的末尾。”
【问题讨论】:
-
如果您的目标是分区,那么很可能值得等待 Postgres 11(将于 2018 年第四季度发布),因为它对分区表有显着的性能改进。另外:通常部分(也称为“过滤”)索引已经走了很长一段路,而不是分区。
-
那么解决了吗?我曾经有一个带有 10k 个表的数据库,而 pgAdmin 的加载速度非常慢。我在想也许使用分区(与多个表相同?),或者使用几个大表会有所帮助?但是我不确定如果我限制整个数据库的刷新操作,那么 10K 表是否对我有用。
标签: sql postgresql database-design