我正在寻求建议。我从未使用过分片,但最近阅读了一些关于它的内容,我怀疑它应该有助于我在数据库(PostgreSQL 9.1)中长时间执行查询。
描述
- 我有
posts
2 亿行的表。 - 每个帖子都有表的外键
projects
。 - 每个项目在帖子表中有 100 到 300,000 行(平均:30,000)
- 通常我在外键上与项目表连接的帖子表上执行查询
projects_id
。 - 我很少与其他表中的页面执行连接。
对于页面中超过 100,000 行的项目,我的查询(检索在给定时间段内添加的帖子和聚合)非常慢。
我应该使用分片吗?
如果是:
- 我应该如何分片?我应该
projects_id
在页表中使用作为键吗? - 分片表页面(创建posts_1,posts_2 ...表)是否足够?
- 我应该在一台机器上使用多个磁盘(分区)(各种磁盘上的分片表)吗?
如果不:
我应该使用什么来代替分片?我购买了具有更快磁盘(SAS)的服务器;它有帮助,但还不够。我尝试使用主从(使用 pgPool2),但是当我想在从数据库上执行更长的查询时,我收到以下错误:
错误:由于与恢复冲突而取消语句详细信息:用户查询可能需要查看必须删除的行版本。
关于分片的详细问题:
- 我应该在每个分片表中有多少行(posts_1,posts_2 ...)
- PostgreSQL 中分片的最佳解决方案/工具是什么?PL/代理?