PostgreSQL vs MySQL: perbandingan fitur spasial

15

Kami adalah dalam proses membangun aplikasi web yang memiliki komponen data spasial. Pada awalnya perbandingan data spasial kami akan mengambil titik tertentu dan mengembalikan poligon spasial tumpang tindih yang cocok.

Karena itu, basis data kami memiliki banyak komponen lain yang mencakup semua hal khas yang akan Anda temukan di basis data relasional umum Anda.

Kami berada di titik dalam proyek kami di mana kami harus memilih solusi database mana yang akan digunakan.

Semua anggota proyek lebih akrab dengan implementasi dan administrasi MySQL, namun semua penelitian menunjukkan bahwa PostgreSQL adalah solusi yang lebih baik - terutama dalam hal data spasial menggunakan postGIS.

Kami berharap (berharap) aplikasi kami akan mengalami banyak tindakan dengan banyak pengguna secara bersamaan.

Adakah orang yang berpengalaman menggunakan MySQL sebagai RDBMS mereka dengan komponen data spasial memiliki saran / pengalaman jangka panjang?

Apakah ada kerugian menggunakan PostGIS dengan pengecualian keakraban?

Ryan Charmley
sumber
Jika Anda belum melihatnya, ada pertanyaan serupa tentang slashdot yang mungkin akan mendapatkan lebih banyak perhatian.
jp

Jawaban:

10

Saya tidak dapat berbicara tentang kelebihan / kekurangan vis-a-vis MySQL, tetapi kode PostGIS secara luas dianggap sebagai salah satu yang terbaik (dalam hal kecepatan / fungsionalitas) dan paling matang (dalam hal pengujian / paparan dunia nyata ) tersedia.

Sebagai contoh, ada pembicaraan di PGEast 2010 oleh beberapa orang dari FAA tentang konversi database bandara mereka (digunakan oleh AeroNav dan yang lainnya untuk menyusun grafik) ke Postgres / PostGIS dari Oracle.
Situs avationDB juga dibangun di atas Postgres (8.0).

Jika pertanyaan terkait GIS adalah inti dari apa yang Anda lakukan, saran saya adalah menggunakan Postgres. Ini tentu saja dapat menangani semua hal lain yang biasanya Anda lakukan dalam database relasional juga.


Dalam hal beralih dari MySQL, dokumentasi di belakang Postgres adalah yang terbaik, dan ada juga bagian dari Oostgres Wiki tentang beralih dari MySQL ke Postgres .
Kurva pembelajaran awal mungkin agak curam dan Anda mungkin perlu mengubah database Anda dan prosedur yang tersimpan (jika Anda sudah menulisnya untuk MySQL), tetapi itu bukan tugas yang tidak dapat diatasi.

Anda harus dapat mengambil cukup untuk beralih dalam beberapa minggu ke depan, dan jika Anda membuat basis data pengembangan, Anda mungkin dapat menguasai tugas-tugas rutin dalam waktu sebulan, dan yakin Anda tahu ke mana harus mencari manual. untuk yang tidak terlalu rutin.

voretaq7
sumber
Selain itu, jika ada yang bisa menggali slide dari pembicaraan PGEast itu, saya sudah mencari mereka selama sekitar satu bulan sekarang dan belum dapat menemukannya. Drive USB yang buruk berkeliaran dengan data saya ...
voretaq7
Apakah maksud Anda ini? postgresqlconference.org/2010/east/talks/… Perlu mendaftar untuk melihat slide.
RK
@RK YA , itulah tautan yang saya cari. DAN saya ingat nama pengguna saya! PESTA!
voretaq7
Saya tidak dapat menemukan tautan untuk slide :(
RK
5

Berbicara tentang beberapa hal yang sangat utama. Berikut adalah daftar hal-hal yang didukung PostGIS yang sama sekali tidak ada di MySQL dan MariaDB.

  • SRID dalam perhitungan, berikan poin Anda SRID yang berbeda dan Anda akan mendapatkan nilai yang berbeda kembali. Ini adalah fungsi Agregat prop: sejauh pengetahuan saya MySQL tidak menawarkan fungsi agregat spasial

K tetangga terdekat: Hanya PostGIS yang mendukung KNN. Temukan titik terdekat ke titik mana saja hanya dengan menggunakan indeks: tidak perlu menghitung jarak dari semua titik! Er. MySQL mematahkan spec dan hanya memeriksa bahwa dua nilai memiliki SRID yang sama. PostGIS dilengkapi dengan database definisi pro4j untuk memungkinkan kesadaran SRID yang mulus. Mengatur SRID dan memanggil ST_Transform( fungsi yang kurang dimiliki MySQL ) akan memproyeksikan ulang koordinat Anda ..

Di MySQL, semua perhitungan dilakukan dengan asumsi SRID 0, terlepas dari nilai SRID yang sebenarnya. SRID 0 mewakili bidang datar Kartesius tanpa batas tanpa unit yang ditugaskan pada sumbunya. Di masa depan, perhitungan dapat menggunakan nilai SRID yang ditentukan. Untuk memastikan perilaku SRID 0, buat nilai geometri menggunakan SRID 0. SRID 0 adalah standar untuk nilai geometri baru jika tidak ada SRID yang ditentukan.

  • Raster : ada banyak fitur di sini dari generasi raster hingga ekstraksi. Anda dapat menghasilkan peta panas dan sejenisnya.

  • Geografi , PostGIS mendukung tipe geografi yang tidak diproyeksikan yang tidak menggunakan matematika Cartesian sama sekali. Ini memiliki seluruh fungsi terkait lambat yang beroperasi pada sphereoids oblate. Sebaliknya MySQL tidak dapat membuat kotak pembatas dalam SRS geografis dari dua titik.

  • Topologi , berbeda dari geometri vektor, topo geoms menyimpan simpul dan hubungan. Pindahkan simpul, ujung juga bergerak dan Anda mendapatkan wajah baru. Ini juga memaksa edge untuk diarahkan yang membuatnya ideal untuk routing. Sebagai subpoin 100% dari apa yang PgRouting lakukan tidak tersedia untuk MySQL - jadi Anda tidak bisa membuat Google Maps atau sejenisnya di atasnya.

  • Geocoding: ada geocoder exstension di direktori contrib yang bekerja dari data sensus, dan loader untuk menginstal data itu.

  • Standarisasi alamat: ada ekstensi yang menangani alamat yang dinormalisasi untuk penguraian, penyimpanan, dan perbandingan yang mudah.

  • Fitur SQL-MM , Anda tidak akan menemukan CIRCULARSTRING COMPOUNDCURVE CURVEPOLYGON MULTICURVEatau MULTISURFACEdi MySQL.

  • nd cords: PostGIS dapat mendukung bentuk dan titik 3dm, 3dz, dan 4d tidak bisa

  • MySQL hanya mendukung indeks r-tree. PostGIS mendukung r-tree (intisari / gin) dan BRIN (untuk tabel geometri besar)

  • Fungsi agregat: sepengetahuan saya MySQL tidak menawarkan fungsi agregat spasial

  • K tetangga terdekat: Hanya PostGIS yang mendukung KNN . Temukan titik terdekat ke titik mana saja hanya dengan menggunakan indeks: tidak perlu menghitung jarak dari semua titik!

  • Pengindeksan. PostgreSQL memungkinkan Anda untuk menyimpan data apa pun pada indeks spasial Anda (yang merupakan indeks inti / gin). Misalnya, Anda dapat menyimpan year(atau data non-spasial lainnya) dan geompada indeks yang sama . Lihat btree_gindan btree_gistuntuk informasi lebih lanjut tentang cara melakukan ini.

Juga, mungkin ada lebih dari 200 fungsi yang didukung oleh PostGIS.

Singkatnya, MySQL tidak memiliki PostgIS sendiri dan ia tahu itu. PostGIS adalah binatang buas. Hanya ingin menjelaskan beberapa hal ini.

Evan Carroll
sumber
0

Saya sepenuhnya setuju dengan semua pernyataan jawaban pertama, tetapi berbagi pengalaman saya sendiri - Saya telah membuat ini di Administrasi Jalan Nasional negara saya: kritikus produksi, situs lalu lintas tinggi. Saya menyarankan aplikasi web diberi makan oleh MySQL dan PostgreSQL / PostGIS.

Untuk semua hal "khas", aplikasi web bekerja dengan sempurna dengan CMS berbasis MySQL. Untuk semua tugas spasial, aplikasi web yang sama berfungsi -juga sempurna;) dengan PostgreSQL / PostGIS membumi pengembangan kustom. Komponen pertama dikembangkan dan dikelola dengan mudah dengan keterampilan MySQL normal. Komponen kedua melibatkan sedikit usaha penelitian di awal.

Anda tidak perlu memaksakan seluruh implementasi mahal dari barang-barang tipikal di PostgreSQL / PostGIS yang tidak terlalu dikenal dan Anda tidak harus memaksakan implementasi yang kurang optimal dari hal-hal geospasial di MySQL juga. Biarkan setiap pemain bermain di mana ia bisa mengenai.

Ariel
sumber
2
Saya biasanya akan menghindari implementasi dual-database di mana satu tidak mutlak diperlukan. Menginstal dan memelihara dua mesin basis data yang terpisah membuat Anda banyak pekerjaan jangka panjang, dan meningkatkan beban pengujian. Mempelajari perbedaan yang sangat kecil antara MySQL dan Postgres di ranah "utilitas umum" adalah jumlah pekerjaan satu kali yang relatif kecil dan menjadikan arsitektur yang lebih bersih ketika Anda selesai ...
voretaq7