バックグラウンド:
ユーザーがさまざまなレポートを生成できるアプリケーションを開発しています。データは PostgreSQL に保存され、自然に固有のグループ キーを持つため、1 つのグループ キーを持つデータは他のグループ キーを持つデータから完全に独立しています。レポートは一度に 1 つのグループ キーのみを使用して作成されるため、すべてのクエリで「WHERE groupKey = X;」が使用されます。句。PostgreSQL のデータは、データを異なるグループに追加する並列プロセスを介して集中的に更新されますが、リアルタイム レポートは必要ありません。30分に1回の更新でOKです。
問題:
すでに約 4 GB のデータがあり、一部のレポートでは生成にかなりの時間がかかる (最大 15 秒) ことがわかりました。これは、1 つのテーブルではなく 3 ~ 4 個のテーブルをクエリする必要があるためです。
私がやりたいことは、ソリューションのテクノロジやスキームを大幅に変更することなく、レポートの作成にかかる時間を短縮することです。
可能な解決策
これについて私が考えていたことは次のとおりです。
1 つのデータベースを複数のデータベースに分割して、グループ キーごとに 1 つのデータベースを作成します。次に、WHERE groupKey = X (各テーブルのその列にインデックスがありますが) を取り除き、毎回処理する行数を大幅に減らします。
読み取り専用のスレーブ データベースを作成します。次に、たとえば 15 分に 1 回、PostgreSQL のレプリケーション メカニズムを使用してデータを同期する必要があります (実際にそれを実行できますか? または、カスタム コードを作成する必要があります)。
データベースを NoSQL に変更したくありません。すべての SQL クエリを書き直す必要があり、そうしたくないからです。無料で Windows で実行される場合は、列ストアをサポートする別の SQL データベースに切り替える可能性があります (申し訳ありませんが、Linux サーバーはありませんが、必要に応じて使用する可能性があります)。
あなたのアイデア
最初の簡単なステップとして何をお勧めしますか?