PostGIS函数如何处理缓冲区和外部存储?


17

我看到PostGIS中不断增加的新功能列表,其中一些涉及GEOS(例如ST_ClusterKMeans)。一些功能(例如中的功能pgrouting)依赖于其他库(例如BGL)。

我的印象是,许多这些基础库(通常在C / C ++中)处理内存与辅助内存/存储/磁盘之间的缓冲区管理。

那么,PostGIS功能之上的PostGIS功能是否可以处理无法存储在物理(或虚拟)内存中的大型数据集?

如果是这样,这些缓冲区管理功能从何而来(从实现的角度来看)?

Answers:


11

不,大多数这些“高阶分析”功能对大于内存的数据集没有任何特殊处理。如果您在此类数据集上运行它们,则只需对后端进行OOM。

一段时间以来,我们避免使用此类功能,但是由于RAM默认情况下会变大,并且人们希望进行更多的分析,而且很少有人达到内存限制,因此收益/缺点方程式已转向“只做就做”。

这些函数中最古老的函数ST_Union()最初是为不受内存限制而构建的,会牺牲性能(非常高)。您仍然可以使用原始函数ST_MemUnion(),该函数实际上(较少地)使用较少的内存,因为“ mem”表示“内存安全”。

如果您向它们提供了足够的数据,则其他函数(例如ST_Buffer())和各种群集,将成为OOM。


1
“内存不足(OOM)是计算机操作的一种通常不希望的状态,其中无法分配额外的内存供程序或操作系统使用。” -维基百科
马丁·F
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.