仓库PostgreSQL数据库架构推荐

时间:2013-07-16 19:48:23

标签: database postgresql architecture

背景

我正在开发一个允许用户生成大量不同报告的应用程序。数据存储在PostgreSQL中并具有自然唯一的组密钥,因此具有一个组密钥的数据完全独立于其他组密钥的数据。报告一次只使用1个组密钥构建,因此所有查询都使用“WHERE groupKey = X;”条款。 PostgreSQL中的数据通过并行进程进行了大量更新,这些进程将数据添加到不同的组中,但我不需要实时报告。每30分钟一次更新很好。

问题:

已经有大约4演出的数据,我发现有些报告需要很长时间才能生成(最多15秒),因为他们需要查询的不是单个表而是3-4个。

我想要做的是减少创建报告所需的时间,而不会显着改变解决方案的技术或方案。

可能的解决方案

我在考虑的是:

  1. 将一个数据库拆分为多个数据库,每个组密钥包含1个数据库。然后我将摆脱WHERE groupKey = X(虽然我在每个表中都有该列的索引),每次处理的行数将会少得多。

  2. 仅为读取创建从属数据库。然后我将必须每隔15分钟将数据与PostgreSQL的复制机制同步一次(我可以实际执行此操作吗?或者我必须编写自定义代码)

  3. 我不想将数据库更改为NoSQL,因为我将不得不重写所有sql查询而我不想这样做。我可以切换到另一个具有列存储支持的SQL数据库,如果它是免费的并且在Windows上运行(对不起,没有Linux服务器,但如果必须的话可能有一个)。

    您的想法

    作为第一个简单步骤,您会建议什么?

2 个答案:

答案 0 :(得分:1)

立即想到报告的两个想法:

1)。设置一些摘要(也称为“聚合”)表,这些表是用户可能运行的查询的预先计算结果。例如。包含按各种维度分组的计数和总和的表。这可以是一个自动化过程 - 数据库函数(或脚本)通过您选择的作业调度程序运行 - 每N分钟刷新一次数据。

2)。关于复制,如果使用流式复制(PostgreSQL 9+),则主数据库中的更改将复制到从属数据库(热备用=只读)以进行报告。

答案 1 :(得分:0)

  1. 调整报告查询。使用说明。当你可以在纯sql中执行它时避免使用过程。
  2. 调整服务器;内存,磁盘,处理器。看看服务器配置。
  3. 升级postgres版本。
  4. 做真空。
  5. 在4个中,只有1个需要对应用程序进行重大更改。