Bagaimana fungsi PostGIS menangani buffer dan penyimpanan eksternal?

17

Saya melihat daftar fungsi baru yang terus meningkat di PostGIS, beberapa di antaranya melibatkan GEOS(misalnya ST_ClusterKMeans). Beberapa fungsi (misalnya yang di pgrouting) bergantung pada perpustakaan lain (misalnya BGL).

Kesan saya adalah bahwa banyak dari pustaka dasar ini (seringkali dalam C / C ++) tidak menangani manajemen buffer antara memori dan memori sekunder / penyimpanan / disk.

Jadi apakah fungsi PostGIS di atasnya berfungsi pada set data besar yang tidak dapat disimpan dalam memori fisik (atau virtual)?

Jika demikian, dari mana kemampuan manajemen buffer ini berasal (dari sudut pandang implementasi)?

tinlyx
sumber

Jawaban:

11

Tidak, sebagian besar fungsi "analisis tingkat tinggi" ini tidak memiliki penanganan khusus untuk kumpulan data yang lebih besar dari yang dapat ditampung dalam memori. Jika Anda menjalankannya di set data seperti itu, Anda hanya akan OOM backend.

Untuk sementara kami menghindari membuat fungsi-fungsi seperti itu, tetapi karena RAM menjadi lebih besar secara default dan orang-orang ingin lebih banyak analisis dan relatif sedikit dari mereka yang pernah mencapai batas memori, persamaan manfaat / kekurangan telah bergeser dalam mendukung "lakukan saja".

Yang tertua dari fungsi-fungsi ini, ST_Union () awalnya dibangun untuk tidak terikat memori, dengan biaya (sangat tinggi) dalam kinerja. Anda masih dapat menggunakan fungsi asli, ST_MemUnion (), yang (membingungkan) sebenarnya menggunakan lebih sedikit memori, karena "mem" berarti "memory safe".

Fungsi lain, seperti ST_Buffer (), berbagai kluster, akan OOM jika Anda memberinya cukup data.

Paul Ramsey
sumber
1
"Kehabisan memori (OOM) adalah kondisi operasi komputer yang sering kali tidak diinginkan di mana tidak ada memori tambahan yang dapat dialokasikan untuk digunakan oleh program atau sistem operasi." - wikipedia
Martin F