Прежде всего, я бы посоветовал вам сделать тест производительности - написать программу, которая генерирует тестовые записи, соответствующие количеству записей, которые вы увидите в течение полугода, вставьте их и проверьте результаты, чтобы узнать, сколько раз запросил удовлетворительные. Если нет, попробуйте выполнить индексацию в соответствии с другими ответами. Кстати, также стоит попробовать записать производительность, чтобы убедиться, что вы действительно можете вставить объем данных, которые вы генерируете, за 15 минут ... 15 минут или меньше.
Проведение теста поможет избежать всех проблем - предположения: -)
Также подумайте о производственной производительности - у вашего пилота будет 2000 пользователей - будет ли ваша производственная среда иметь 4000 пользователей или 200000 пользователей в год или два?
Если мы говорим о действительно большой среде, вам нужно подумать о решении, которое позволит вам масштабироваться, добавляя больше узлов, вместо того, чтобы полагаться на возможность всегда добавлять больше ЦП, диска и памяти на одну машину. Вы можете сделать это в своем приложении, отслеживая, на какой из нескольких машин баз данных размещается информация для конкретного пользователя, или вы можете использовать один из методов кластеризации Postgresql, или вы можете пойти совершенно другим путем - Подход NoSQL , при котором вы полностью отказываетесь от СУБД и используете системы, построенные для горизонтального масштабирования.
Существует несколько таких систем. У меня есть только личный опыт Кассандра . Вы должны думать совершенно иначе по сравнению с тем, к чему вы привыкли в мире РСУБД, что является чем-то непростым - подумайте больше о том, как вы хотите
чтобы получить доступ к данным, а не как их хранить. Для вашего примера я думаю, что было бы целесообразно сохранить данные с идентификатором пользователя в качестве ключа, а затем добавить столбец с именем столбца, являющимся меткой времени, и значением столбца, являющимся вашими данными для этой метки времени. Затем вы можете запросить срезы этих столбцов, например, для отображения результатов в веб-интерфейсе. У Cassandra достаточно времени отклика для приложений пользовательского интерфейса.
Преимущество вложения времени в изучение и использование системы nosql заключается в том, что когда вам нужно больше места - вы просто добавляете новый узел. То же самое, если вам нужна большая производительность записи или большая производительность чтения.