В зависимости от агрегации, которую вы выполняете, может работать выбор всех результатов и обработка оконной части клиента.
Затем клиент может (заменить 1000 размером вашего окна):
- Считайте первые 1000 результатов и рассчитайте текущие значения.
- Вычтите первый результат из расчета.
- Прочитайте следующий результат и добавьте к вычислению.
- Повторяйте 2 и 3, пока все результаты не будут обработаны.
Таким образом, вам не нужно перечислять все 1000 результатов при каждом прочтении следующего значения, изменяя алгоритм с O (n ^ 2) на O (n).
Чтобы повысить эффективность при чтении, вы можете использовать очередь, поддерживаемую кольцевым буфером фиксированной длины, для хранения текущего окна результатов. Это позволит вам рассматривать буфер как стандартную очередь, но без необходимости перестановки элементов в резервном массиве при добавлении / удалении элементов.