Как функции PostGIS обрабатывают буферы и внешнее хранилище?

17

Я вижу постоянно растущий список новых функций в PostGIS, некоторые из которых включают GEOS(например ST_ClusterKMeans). Некоторые функции (например, в pgrouting) полагаются на другие библиотеки (например BGL).

У меня сложилось впечатление, что многие из этих базовых библиотек (часто в C / C ++) не обрабатывают управление буферами между памятью и вторичной памятью / хранилищем / дисками.

Так работают ли функции PostGIS поверх них, работая с большими наборами данных, которые невозможно сохранить в физической (или виртуальной) памяти?

Если да, то откуда берутся эти возможности управления буфером (с точки зрения реализации)?

tinlyx
источник

Ответы:

11

Нет, большинство из этих функций «анализа более высокого порядка» не имеют специальной обработки для наборов данных, которые больше, чем могут поместиться в памяти. Если вы запустите их на таких наборах данных, вы просто получите OOM-сервер.

Некоторое время мы избегали создания таких функций, но по умолчанию объем оперативной памяти увеличивался, и люди хотели больше анализировать, а относительно немногие из них когда-либо выходили за пределы памяти, уравнение преимуществ / недостатков сместилось в пользу «просто сделай это».

Самая старая из этих функций, ST_Union (), изначально была построена так, чтобы не ограничивать память, за счет (очень высоких) затрат на производительность. Вы все еще можете использовать оригинальную функцию ST_MemUnion (), которая (смущает) на самом деле использует меньше памяти, так как «mem» означает «память безопасна».

Другие функции, такие как ST_Buffer (), различные кластеры, будут OOM, если вы предоставите им достаточно данных.

Пол Рэмси
источник
1
«Недостаточно памяти (OOM) - это часто нежелательное состояние работы компьютера, когда никакая дополнительная память не может быть выделена для использования программами или операционной системой». - Википедия
Мартин Ф