背景:
我正在开发一个允许用户生成许多不同报告的应用程序。数据存储在 PostgreSQL 中,具有自然唯一的 group key,因此一个 group key 的数据完全独立于其他 group key 的数据。一次仅使用 1 个组键构建报告,因此所有查询都使用“WHERE groupKey = X;” 条款。PostgreSQL 中的数据通过并行进程密集更新,将数据添加到不同的组中,但我不需要实时报告。每 30 分钟更新一次即可。
问题:
已经有大约 4 gigs 的数据,我发现一些报告需要很长时间才能生成(最多 15 秒),因为他们需要查询的不是单个表,而是其中的 3-4 个。
我想做的是在不显着改变解决方案的技术或方案的情况下减少创建报告所需的时间。
可能的解决方案
我当时在想的是:
将一个数据库拆分为多个数据库,每个组键 1 个数据库。然后我将摆脱 WHERE groupKey = X (尽管我在每个表中的该列上都有索引)并且每次要处理的行数会大大减少。
为只读创建从数据库。然后我必须将数据与 PostgreSQL 的复制机制同步一次,例如每 15 分钟一次(我真的可以这样做吗?或者我必须编写自定义代码)
我不想将数据库更改为 NoSQL,因为我将不得不重写所有 sql 查询而且我不想这样做。如果它是免费的并且在 Windows 上运行,我可能会切换到另一个支持列存储的 SQL 数据库(对不起,没有 Linux 服务器,但如果我必须有的话可能会有)。
你的想法
您会推荐什么作为最初的简单步骤?