Postgresql中水平分区的正确步骤是什么?

Bra*_*o76 13 sql postgresql sharding

我们有一个带有Postgresql 9.1数据库的电子商务门户.一个非常重要的表目前有3200万条记录.如果我们想要提供所有项目,这个表将增长到3.2亿条记录,主要是日期.哪个会很重.

所以我们正在考虑水平分区/分片.我们可以将此表中的项目划分为12个横向(每月1个).这样做的最佳步骤和技术是什么?数据库中的水平分区是否足够好,还是我们必须开始考虑分片?

a_h*_*ame 24

虽然3.2亿不小,但它也不是很大.

它在很大程度上取决于您在桌面上运行的查询.如果您始终在查询中包含分区键,那么"常规"分区可能会起作用.

这方面的一个例子可以在PostgreSQL wiki中找到:http:
//wiki.postgresql.org/wiki/Month_based_pa​​rtitioning

该手册还解释了一些分区的注意事项:http:
//www.postgresql.org/docs/current/interactive/ddl-partitioning.html

如果您正在考虑分片,您可能会看到Instagram(由PostgreSQL提供支持)如何实现:

http://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram

如果您主要具有读取查询,则另一个选项可能是使用流复制来设置多个服务器并通过连接到热备用以进行读取访问并连接到主服务器以进行写访问来分发读取查询.我认为pg-pool II可以(有些)自动完成.这可以与分区结合使用,以进一步减少查询运行时.

如果您喜欢冒险并且没有立即需要这样做,您可能还会考虑Postgres-XC,它承诺支持透明的水平缩放:http:
//postgres-xc.sourceforge.net/

目前还没有最终版本,但看起来这并不需要太长时间

  • 就像数据点一样,我们的商店在我们访问量最大的表中有超过3亿行,没有分区或分片,而且工作正常.为了重申上述一些内容,使分区变得有价值的关键因素是具有分区键,该分区键通常用于限制查询中感兴趣的行,并且希望定期删除整个分区.(删除分区比删除1/12行要快得多.) (5认同)