PostgreSQL ve MySQL: uzamsal özellik karşılaştırması


15

Mekansal veri bileşeni olan bir web uygulaması oluşturma sürecindeyiz. Başlangıçta, uzamsal veri karşılaştırmalarımız belirli bir noktayı alacak ve geri dönüşle eşleşen örtüşen uzamsal çokgenleri alacaktır.

Bununla birlikte, veritabanımızın genel ilişkisel veritabanınızda bulacağınız tüm tipik şeyleri içeren birçok başka bileşeni vardır.

Projemizde hangi veritabanı çözümünün kullanılacağını seçmemiz gereken noktadayız.

Tüm proje üyeleri MySQL'in uygulanmasına ve yönetimine daha aşinadır, ancak tüm araştırmalar PostgreSQL'in özellikle postGIS kullanan uzamsal veriler açısından daha iyi bir çözüm olduğunu göstermektedir.

Uygulamamızın bir çok eşzamanlı kullanıcıyla çok fazla eylem yaşayacağını umuyoruz (umuyoruz).

Bir uzamsal veri bileşeniyle RDBMS olarak MySQL kullanma deneyimi olan herkesin uzun vadeli tavsiye / deneyimleri var mı?

PostGIS'i aşinalık dışında kullanmanın herhangi bir dezavantajı var mı?


Eğer görmediyseniz, slashdot üzerinde muhtemelen daha fazla dikkat çekecek benzer bir soru var .
jp

Yanıtlar:


10

MySQL karşısında avantajları / dezavantajları hakkında konuşamam, ancak PostGIS kodu oldukça hızlı bir şekilde (hız / işlevsellik açısından) ve en olgun (test / gerçek dünyaya maruz kalma açısından) olarak kabul edilir ) mevcut.

Örneğin, PGEast 2010'da, FAA'dan bazı insanlar tarafından havaalanı veritabanlarını (AeroNav ve diğerleri tarafından çizelgeleri derlemek için kullanılan) Oracle'dan Postgres / PostGIS'e dönüştürmeleri hakkında bir konuşma yapıldı. AvationDB sitesi ayrıca Postgres (8.0) üzerine inşa edilmiştir.

CBS ile ilgili sorgular yaptığınız şeyin merkezinde yer alıyorsa, önerim Postgres ile gitmek olacaktır. Kesinlikle normalde ilişkisel bir veritabanında yapacağınız her şeyi halledebilir.


MySQL'den geçiş yapmak açısından Postgres'in arkasındaki belgeler birinci sınıftır ve Oostgres Wiki'nin MySQL'den Postgres'e geçişle ilgili bir bölümü de vardır .
İlk öğrenme eğrisi biraz dik olabilir ve veritabanınızı ve saklı yordamlarınızı (zaten MySQL için yazdıysanız) ayarlamanız gerekebilir, ancak bu aşılamaz bir görev değildir.

Geçişi birkaç hafta içinde yapacak kadar alabilmelisiniz ve bir geliştirme veritabanı kurarsanız, bir ay içinde rutin görevlerde muhtemelen usta olabilirsiniz ve kılavuzda nereye bakacağınızı bildiğinizden emin olabilirsiniz. çok rutin olmayanlar için.


Bir kenara, herkes bu PGEast konuşmasından slaytları kazabiliyorsa, yaklaşık bir aydır onları arıyorum ve onları bulamadım. Verilerimle dolaşan berbat USB sürücüler ...
voretaq7

Bunu mu demek istediniz? postgresqlconference.org/2010/east/talks/… Slaytları görüntülemek için kaydolmanız gerekir.
RK

@RK YES , aradığım bağlantı bu. VE kullanıcı adımı hatırlıyorum! PARTİ!
voretaq7

Yine de slaytlar için bağlantı bulamadım :(
RK

5

Bazı çok önemli şeylerden bahsetmişken. PostGIS'in MySQL ve MariaDB'de tamamen eksik olan şeylerin listesi.

  • Hesaplamalarda SRID, puanlarınıza farklı bir SRID verin ve farklı değerler geri alacaksınız. Bu Toplama fonksiyonları pervane: bildiğim kadarıyla MySQL hiçbir uzamsal toplama fonksiyonu sunuyor

En yakın K komşusu: Sadece PostGIS KNN'yi destekler. Sadece bir indeks kullanarak herhangi bir noktaya en yakın noktayı bulun: tüm noktalardan mesafeyi hesaplamaya gerek yok! Er. MySQL spesifikasyonu bozar ve sadece iki değerin aynı SRID'ye sahip olup olmadığını kontrol eder. PostGIS, sorunsuz SRID farkındalığı sağlamak için pro4j tanımlarının bir veri tabanı ile birlikte gelir . Bir SRID ayarlamak ve ST_Transform( MySQL'in eksik olduğu bir işlev ) çağırmak koordinatlarınızı yeniden çizecektir.

MySQL'de, tüm hesaplamalar gerçek SRID değerine bakılmaksızın SRID 0 olduğu varsayılarak yapılır. SRID 0, eksenlerine hiçbir birim atanmamış sonsuz bir düz Kartezyen düzlemi temsil eder. Gelecekte, hesaplamalar belirtilen SRID değerlerini kullanabilir. SRID 0 davranışını sağlamak için, SRID 0 kullanarak geometri değerleri oluşturun. SRID 0, SRID belirtilmemişse yeni geometri değerleri için varsayılan değerdir.

  • Rasterler : Raster üretiminden ekstraksiyona kadar bir ton özellik var. Isı haritaları ve benzerleri üretebilirsiniz.

  • Coğrafya , PostGIS, Kartezyen matematik kullanmayan, tahmin edilmemiş bir coğrafya türünü destekler. Oblate kürecikler üzerinde çalışan ilişkili işlevlerin tamamen yavaşlaması vardır. Tersine MySQL, coğrafi bir SRS'de iki noktadan bir sınırlayıcı kutu bile oluşturamaz.

  • Topoloji , vektör geometrilerinden farklı olarak, topo geomları düğümleri ve ilişkileri saklar. Bir düğümü hareket ettirin, kenar da hareket eder ve yeni bir yüz elde edersiniz. Bu aynı zamanda kenarları yönlendirmeye zorlar ve bu da onları yönlendirme için ideal kılar. Şeyin bir subpoint% 100 olarak PgRouting yapar MySQL için kullanılamaz - sadece çok olamaz bunun üstüne bir Google Maps ya da benzeri oluşturun.

  • Coğrafi kodlama: katkı dizininde nüfus sayımı verileri üzerinde çalışan coğrafi kodlayıcı uzatması ve bu verileri yüklemek için bir yükleyici vardır.

  • Adres standardizasyonu: kolay ayrıştırma, depolama ve karşılaştırma için normalleştirme adreslerini işleyen bir uzantı vardır.

  • SQL-AA özellikleri sadece bulamazsınız, CIRCULARSTRING COMPOUNDCURVE CURVEPOLYGON MULTICURVEya MULTISURFACEMySQL.

  • nd sicimler: PostGIS 3dm destekleyebilir, 3DZ ve 4d şekil ve puanları MySQL basitçe olamaz

  • MySQL yalnızca r-ağacı dizinlerini destekler. PostGIS, r-ağacı (gist / gin) ve BRIN'ı (büyük geometri tabloları için) destekler

  • Toplama işlevleri: Bildiğim kadarıyla MySQL, uzamsal toplama işlevleri sunmaz

  • En yakın K komşusu: Sadece PostGIS KNN'yi destekler . Sadece bir indeks kullanarak herhangi bir noktaya en yakın noktayı bulun: tüm noktalardan mesafeyi hesaplamaya gerek yok!

  • Dizin. PostgreSQL, mekansal dizininizdeki (gist / gin dizini) herhangi bir veri depolamanızı sağlar. Örneğin, saklayabilir year(ya da diğer mekansal olmayan verilerin) ve geomüzerinde aynı indeksi. Bunun nasıl yapılacağı hakkında daha fazla bilgi için btree_ginve bölümlerine bakın btree_gist.

Ayrıca, muhtemelen PostGIS tarafından desteklenen 200 veya daha fazla işlev vardır.

Kısacası, MySQL PostGIS'e ait değildir ve bunu bilir. PostGIS bir canavar. Sadece bazı şeyleri açıklamak istedim.


0

İlk cevabın tüm ifadelerine tamamen katılıyorum, ancak kendi deneyimimi paylaşıyorum -Bunu ülkemin Ulusal Karayolları İdaresi'nde yaptım: üretim eleştirmeni, yüksek trafik sitesi. Bir web uygulamasının hem MySQL hem de PostgreSQL / PostGIS tarafından beslenmesini öneririm.

Tüm "tipik" şeyler için, web uygulaması MySQL tabanlı CMS ile kusursuz bir şekilde çalışır. Tüm mekansal görevler için, aynı web uygulaması da kusursuz çalışır;) PostgreSQL / PostGIS topraklı özel geliştirme ile. İlk bileşen normal MySQL becerileri ile geliştirilmiş ve zahmetsizce korunmuştur. İkinci bileşen başlangıçta biraz daha fazla araştırma çabası içeriyordu.

Bilindik olmayan PostgreSQL / PostGIS'de tipik bir şeylerin maliyetli bir şekilde uygulanmasını zorlamak zorunda değilsiniz ve MySQL'deki jeo-uzamsal şeylerin yetersiz bir uygulamasını da zorlamak zorunda değilsiniz. Her oyuncunun vurabileceği yerde oynamasına izin verin.


2
Normalde bir kesinlikle gerekli olmayan bir çift veritabanı uygulaması kaçınmak. İki ayrı veritabanı motorunu kurmak ve bakımını yapmak, önemli miktarda uzun süreli çalışma yapmanızı sağlar ve test yükünü artırır. "Genel hizmet" alanında MySQL ve Postgres arasındaki çok küçük farkları öğrenmek , bir kerelik çalışmaların nispeten küçük bir miktarıdır ve işiniz bittiğinde daha temiz bir mimari yapar ...
voretaq7
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.