Главное, что PostgreSQL материализует результирующий набор на диск, если он становится слишком большим. Это означает, что вы получаете быстрый удар, но он сохраняет память свободным для других операций.
Как правило, в PostgreSQL редко требуется отправлять сотни тысяч или миллионы строк клиенту. Ключ состоит в том, чтобы создавать ваши запросы (и с необходимыми расширениями SQL по мере необходимости), чтобы возвращать в базу данных только данные, необходимые вашему интерфейсу, правильно агрегированные и т. Д. Я встречал нескольких людей, которые думают, что включение такой логики агрегации в db замедляет ее (и есть временная стоимость процессора), но затраты в этой области, как правило, многократно погашаются в ожидании ввода-вывода на диске временные затраты и тому подобное.
Основной вопрос, который я задал бы, - «зачем вам нужно видеть миллионы записей?» Вы в основном говорите, что хотите сохранить их в памяти или сохранить их на диске, затем перенести их по сети, затем получить их, а затем обработать. Это не пример эффективности. Это far лучше обрабатывать миллионы записей рядом с хранилищем и, следовательно, тратить некоторую стоимость процессора для других.
Если вам нужно что-то более сложное внутризарядное параллелизм в смешанной или DW-среде, перейдите в Postgres-XC вместо vanilla PostgreSQL. Это имеет значительную сложность, но в больших средах решения других неразрешимых проблем решаются.
Лучший способ обработки большого набора данных - оставить его в базе данных и выполнить всю свою работу с ним в базе данных. –
Вопрос: «Что вам нужно сделать с миллионами выбранных записей? Отобразите их пользователю?« –
Допустим, что рассматриваемая таблица является координатой для времени жизни модели. Если координата берется каждую секунду, значит, могут быть миллионы координат. Если я хочу их отобразить, мне нужно получить каждый из них (скажем, я должен и не может использовать ярлыки) –