Format penyimpanan spasial tercepat?

8

Saya bertanya-tanya metode penyimpanan apa yang akan menghasilkan pembacaan tercepat dari vektor peta untuk rendering. SHP? PostGres? SQLite? (Mereka tidak sering berubah dan saya tidak perlu fungsi spasial untuk vektor-vektor ini).

Nate
sumber
1
Berapa banyak fitur yang Anda bicarakan?
Roger D.
2
Pertanyaan Anda tampaknya menyiratkan bahwa bottleneck adalah proses membaca data. Pengalaman saya adalah bahwa beban aktual dalam proses rendering itu sendiri, setidaknya dengan MapServer. Artinya, saya tidak melihat bahwa menggunakan shapefile atau database spasial akan membuat perbedaan besar.
dariapra
@Roger - Saya tidak yakin. Ini adalah Peta AS yang menggunakan resolusi tertinggi (negara, kabupaten, jalan, sungai). Saya mendapat data dari naturalearthdata.com
Nate
@Nate, karena itu, mengapa note membaca di OSM, atau Google untuk peta Anda? Lalu overlay di atasnya? Untuk membuat seluruh AS hidup setiap waktu adalah proses besar. Maka Anda perlu mempertimbangkan kinerja jaringan, kinerja disk-io, CPU. Ada banyak hal yang dapat dan akan berdampak pada kinerja.
DEWright

Jawaban:

12

Tes Kecepatan

Ada beberapa tes yang sangat cepat dari shapefile versus database (PostGIS) untuk MapServer dalam presentasi ini (dari 2007).

Singkatnya:

  • Untuk dataset dari 3 juta fitur yang menjalankan permintaan untuk 30 fitur satu demi satu PostGIS lebih cepat daripada shapefile (meskipun ini mungkin telah diubah oleh perbaikan untuk membaca indeks shapefile)
  • Untuk dataset 10.000 fitur, shapefile sedikit lebih cepat.
  • Untuk permintaan bersamaan, shapfile lebih cepat

Dan waktu secara rinci, yang juga dapat membantu untuk memutuskan apakah format penyimpanan merupakan faktor penting.

                       PostGIS   Shapefile 
Start mapserv process  15ms      15ms
Load mapfile           3ms       3ms
Connect to DB          14ms      n/a
Query                  20ms      n/a
Fetch                  7ms       n/a
Draw                   11ms      28ms
Write Image            8ms       8ms
Network Delay          3ms       3ms

Selalu gunakan FastCGI di MapServer jika menggunakan database, karena koneksi database dapat digunakan kembali, jika tidak, koneksi baru harus dibuat pada setiap permintaan.

Implementasi untuk Pembaca Shapefile

Kecepatan membaca shapefile (dan data dari database) tergantung pada implementasi pengkodean spesifik.

Kode sumber untuk MapServer membuka shapefile dapat dilihat di sini . Mengikuti komentar Anda dapat melihat betapa pentingnya memiliki indeks. Biasanya Anda hanya bisa membaca file dalam satu arah untuk mendapatkan catatan, tetapi dengan indeks Anda bisa membaca dalam dua arah.

345   /*    Read the .shx file to get the offsets to each record in             */
346   /*    the .shp file.   

Lain adalah contoh membuka shapefile dapat dilihat pada sumber Python untuk PyShp . Sekali lagi Anda dapat melihat bagaimana indeks digunakan untuk menemukan bentuk tertentu secara langsung.

Faktor-Faktor Lain untuk Dipertimbangkan

Keterbatasan format DBF (batas ukuran bidang, tidak ada dukungan nol, batas penyimpanan teks), juga harus dipertimbangkan ketika memutuskan apakah akan menggunakan database atau tidak.

Basis data juga menawarkan cara untuk mengamankan data, lebih mudah bergabung dan membuat tampilan, mencatat dan banyak fitur lain yang tidak akan Anda dapatkan dengan file mandiri.

geografi
sumber
10

Berlawanan dengan apa yang dikatakan dariapra, pengalaman saya dalam mengembangkan Maperitive memberi tahu saya bahwa hambatan terbesar adalah pemuatan data yang sebenarnya sebelum rendering. Itu semua sangat tergantung pada seberapa besar keseluruhan dataset tersimpan dan seberapa besar dataset yang Anda coba render dalam sekali jalan. Jika Anda dapat memuat semuanya ke dalam memori, maka shapefile mungkin lebih baik daripada menggunakan mesin basis data.

Igor Brejc
sumber
4
+1 untuk menunjukkan bahwa bentuk bottleneck penting dan memberikan informasi dari pengalaman aktual. Barang bagus.
whuber
Di mana hambatannya tampaknya merupakan pertanyaan yang menarik dan terbuka yang tergantung pada sejumlah variabel, mungkin jenis beban kerja adalah yang penting. Saya ingat bahwa setelah saya mengindeks beberapa shapefile dengan shapetree untuk mendapatkan rendering lebih cepat dari beberapa layer vektor dengan MapServer, dan saya tidak mendapatkan keuntungan kinerja yang signifikan.
dariapra
2
@dariapra Benar, itu sangat tergantung pada use case. Jika dia dapat memuat semua data dalam sekali jalan, maka indeks spasial tidak benar-benar diperlukan, tetapi memuat data dari shapefile harus lebih cepat daripada mengeksekusi query SQL. Di sisi lain, jika ada sejumlah besar data yang perlu disaring, saya akan bertaruh pada database dan bukan shapefile.
Igor Brejc
4

Program mana yang akan Anda gunakan untuk rendering? Ini dapat mempengaruhi hasil. Bagaimanapun, memiliki shapefile dengan indeks spasial (mis. Http://mapserver.org/utilities/shptree.html ) yang digunakan seringkali merupakan teknik tercepat. Terlepas dari itu: itu tergantung pada aplikasi Anda, tetapi caching hasil yang Anda rujuk sering jauh lebih berguna untuk meningkatkan kinerja.

johanvdw
sumber
Terima kasih. Saya menggunakan MapGuide saat ini (masih agak mengeksplorasi opsi kami), dan saya telah melihat Mapserver.
Nate
2

Shapefile akan menjadi yang tercepat dan mungkin taruhan terbaik Anda. Ada overhead untuk setiap database SQL, lalu ada pengelolaan pengembalian set hasil besar (konversi dari tipe data database ke tipe data asli juga akan memperlambat hal-hal).

Coba gunakan paket open source dari maptools.org untuk membaca Anda. Alat-alat ArcGIS, meskipun dibuat khusus, memiliki sedikit overhead untuk memulai dan mahal.

Semoga ini membantu

OptimizePrime
sumber