まず最初に、パフォーマンス テストを行うことをお勧めします。半年で表示されるエントリの数に対応するテスト エントリを生成するプログラムを作成し、それらを挿入して結果をチェックし、クエリ時間が満足できるものかどうかを確認します。そうでない場合は、他の回答で提案されているようにインデックスを作成してみてください。ところで、15 分で生成している量のデータを実際に 15 分以内に挿入できることを確認するために、書き込みパフォーマンスを試す価値もあります。
テストを行うと、すべての問題の母を回避できます-仮定:-)
また、本番環境のパフォーマンスについても考えてください。パイロットには 2000 人のユーザーがいます。本番環境には、1 年か 2 年で 4000 人のユーザーまたは 200000 人のユーザーがいますか?
非常に大規模な環境について話している場合は、1 台のマシンに常に CPU、ディスク、およびメモリを追加できることに頼るのではなく、ノードを追加してスケールアウトできるソリューションについて考える必要があります。複数のデータベース マシンのどれが特定のユーザーの詳細をホストしているかを追跡することで、アプリケーションでこれを行うことができます。または、Postgresql クラスタリング メソッドの 1 つを使用するか、まったく異なるパス ( NoSQLアプローチ)を使用することもできます。 RDBMS から完全に離れて、水平方向にスケーリングするように構築されたシステムを使用します。
そのようなシステムはいくつかあります。私はCassandraの個人的な経験しかありません。RDBMS の世界で慣れ親しんできたものとはまったく異なる考え方をしなければなりませんが、これは少し難しいことです。データを保存する方法よりも、データにアクセスする方法について考えてください。あなたの例では、ユーザーIDをキーとしてデータを保存し、列名がタイムスタンプで列値がそのタイムスタンプのデータである列を追加すると理にかなっていると思います。次に、たとえば Web UI で結果をグラフ化するために、これらの列のスライスを要求できます。Cassandra は、UI アプリケーションに対して十分な応答時間を備えています。
nosql システムの学習と使用に時間を費やすことの利点は、より多くのスペースが必要になったときに、新しいノードを追加するだけで済むことです。より高い書き込みパフォーマンスまたはより高い読み取りパフォーマンスが必要な場合も同じです。