Sql Postgres-一个巨型表vs 10k+独立表-分区

Sql Postgres-一个巨型表vs 10k+独立表-分区,sql,postgresql,database-design,Sql,Postgresql,Database Design,在过去的两年中,我们试用了许多不同的数据库引擎和数据库样式,以解决一个需要NoSQL和RDBMS包的特性的特定问题。我们选择了RDBMS和Postgres 我们已经对许多不同的场景进行了性能测试,结果表明Postgres一直都能很好地处理所有事情,但我们知道模拟不是生产,其他人在大规模数据库方面有着截然不同的经验 “一个巨人vs许多小巨人”是一个广受欢迎的论据,但我的问题是规模适中的硬件的效率适中的硬件从一个小的linux VPS机箱开始,随着需求的增长而变得越来越大 我们有一个表,5列,2个索

在过去的两年中,我们试用了许多不同的数据库引擎和数据库样式,以解决一个需要NoSQL和RDBMS包的特性的特定问题。我们选择了RDBMS和Postgres

我们已经对许多不同的场景进行了性能测试,结果表明Postgres一直都能很好地处理所有事情,但我们知道模拟不是生产,其他人在大规模数据库方面有着截然不同的经验

“一个巨人vs许多小巨人”是一个广受欢迎的论据,但我的问题是规模适中的硬件的效率适中的硬件从一个小的linux VPS机箱开始,随着需求的增长而变得越来越大

我们有一个表,5列,2个索引,1个三向索引,很容易超过10亿行。如果我们改为说10K甚至100k表,这会稀释服务器资源吗?因为由于表的数量太多,索引不能全部保存在ram中?如果数据被拆分,那么几乎所有10k表都将被读/写,因此没有特定的活动表

在讨论分区时,因为所有的分区都是热的,所以我假设这也会带来有限的好处,因为读/写活动非常广泛


所以我的问题是:在资源有限的情况下,当数据被分割到单个表中或分割到多个表中时,Postgre是否会变得效率低下。如果只使用一个表索引,并且几乎所有的活动都集中在表的末尾,是否可以提高效率。

听起来分区并不会给您带来太多好处。如果你太过火了,做了10公里的隔板,你可能会有很多超负荷。即使您做了一些更合理的事情,比如100个分区,如果您使用触发器将元组定向到正确的分区,这仍然会带来很大的开销。但是从在RAM中拟合数据的角度来看,拆分索引应该不是一个大问题。无论是否分区,数据的总量都几乎相同

即使您没有好的分区键,分区的一些好处可能是:

您或autovacuum工作人员可以分别对每个分区进行真空吸尘。与一个巨大的表不同,这可以在分区上并行发生。如果是连续的,你仍然有一个优势,那就是有一些离散的块,可以最终取得进展。如果工作台真空在完成前被中断,例如,由于系统维护,它会失去完成的大部分工作,需要重复;这可能是大型表的一个主要问题。 如果需要添加索引,可以将它们并行地添加到不同的分区。或者,您可以将它们按顺序添加,但要有大量的小维护窗口,而不是一个巨大的维护窗口。 例如,如果需要重新编制索引以解决索引膨胀问题,则其好处与添加索引相同。 如果需要添加存储但无法对RAID进行在线扩展,则可以将分区迁移到不同的表空间。虽然您可能也可以将不同表空间中的分区添加到以前未分区的表中,但这可能没有多大好处。
如果您的目标是分区,那么等待Postgres 11在2018年第4季度发布很可能是值得的,因为它大大提高了分区表的性能。另外:通常情况下,部分过滤索引已经在很大程度上取代了分区。那么问题解决了吗?我以前有一个数据库,有10k个表,pgAdmin负载非常慢。我在想也许使用分区和多个表一样,或者使用几个大表会有帮助吗?但我不确定,因为10K表对我有用,所以我是否限制对整个数据库的刷新操作。