J'ai travaillé avec les trois bases de données et effectué des migrations entre elles. J'espère donc pouvoir encore ajouter quelque chose à un ancien article. Il y a dix ans, j'ai été chargé de transférer un vaste ensemble de données - 450 millions d'objets spatiaux - de GML vers une base de données spatiale. J'ai décidé d'essayer MySQL et Postgis. À l'époque, il n'y avait pas de base de données spatiales dans SQL Server et nous étions une petite entreprise en démarrage, donc MySQL semblait convenir. Par la suite, j'ai été impliqué dans MySQL, j'ai participé à plusieurs conférences et j'ai été fortement impliqué dans le test bêta des fonctions plus compatibles avec les SIG dans MySQL, qui a finalement été publié avec la version 5.5. J'ai ensuite participé à la migration de nos données spatiales vers Postgis et de nos données d'entreprise (avec des éléments spatiaux) vers SQL Server. Voici mes conclusions.
MySQL
1). Problèmes de stabilité. Au cours des 5 dernières années, nous avons eu plusieurs problèmes de corruption de la base de données, qui ne pouvaient être résolus qu'en exécutant myismachk sur le fichier d'index, un processus qui peut prendre bien plus de 24 heures sur une table de 450 millions de lignes.
2). Jusqu'à récemment, seules les tables MyISAM supportaient le type de données spatiales. Cela signifie que si vous souhaitez une prise en charge des transactions, vous n'avez pas de chance. Le type de table InnoDB prend désormais en charge les types de données spatiales, mais pas les index, ce qui, étant donné la taille typique des ensembles de données spatiales, n'est pas très utile. Voir http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html D'après ce que j'ai pu constater lors des conférences, le spatial n'a été envisagé qu'après coup : nous avons mis en place la réplication, le partitionnement, etc. mais cela ne fonctionne pas avec le spatial. EDIT : Dans le prochaine version 5.7.5 InnoDB va enfin prendre en charge les index sur les colonnes spatiales, ce qui signifie que les ACID, les clés étrangères et les index spatiaux seront enfin disponibles dans le même moteur.
3). La fonctionnalité spatiale est extrêmement limitée par rapport à Postgis et SQL Server spatial. Il n'y a toujours pas de fonction ST_Union qui agit sur un champ géométrique entier, l'une des requêtes que j'exécute le plus souvent, c'est-à-dire que l'on ne peut pas écrire :
select attribute, ST_Union(geom) from some_table group by some_attribute
ce qui est très utile dans un contexte SIG. Select ST_Union(geom1, const_geom) from some_table
Le fait que l'une des géométries soit une géométrie constante codée en dur est un peu limité en comparaison.
4). Pas de support pour les rasters. La possibilité d'effectuer une analyse combinée vecteur-raster dans une base de données est une fonctionnalité SIG très utile.
5). Aucun support pour la conversion d'un système de référence spatiale à un autre.
6). Depuis l'acquisition par Oracle, le spatial a vraiment été mis en veilleuse.
Dans l'ensemble, pour être juste envers MySQL, il a supporté notre site web, notre WMS et le traitement spatial général pendant plusieurs années, et a été facile à mettre en place. En revanche, la corruption des données était un problème, et en étant obligé d'utiliser des tables MyISAM, vous renoncez à une grande partie des avantages d'un SGBDR.
Postgis
Compte tenu des problèmes que nous rencontrions avec MySQL, nous avons finalement opté pour Postgis. Les points clés de cette expérience ont été.
1). Extrême stabilité. Aucune corruption de données en 5 ans et nous avons maintenant environ 25 boîtes Postgres/GIS sur des machines virtuelles Centos, à des degrés divers de charge.
2). Le rythme rapide de développement - raster, topologie, support 3D en sont des exemples récents.
3). Communauté très active. Le canal irc et la liste de diffusion Postgis sont d'excellentes ressources. Le manuel de référence de Postgis est également excellent. http://postgis.net/docs/manual-2.0/
4). Joue très bien avec d'autres applications, sous le parapluie OSGeo, telles que GeoServer et GDAL.
5). Les procédures stockées peuvent être écrites dans de nombreux langages, en dehors du langage par défaut plpgsql, comme Python ou R.
5). Postgres est un SGBDR très conforme aux normes, doté de toutes les fonctionnalités, qui vise à rester proche des normes ANSI.
6). Prise en charge des fonctions de fenêtre et des requêtes récursives -- non pas dans MySQL, mais dans SQL Server. Cela a rendu plus propre l'écriture de requêtes spatiales plus complexes.
SQL Server.
Je n'ai utilisé que la fonctionnalité spatiale de SQL Server 2008, et bon nombre des inconvénients de cette version - absence de prise en charge des conversions d'un SRC à un autre, nécessité d'ajouter ses propres paramètres aux index spatiaux - ont été résolus.
1). Comme les objets spatiaux dans SQL Server sont essentiellement des objets CLR, la syntaxe semble rétrograde. Au lieu de ST_Area(geom), vous écrivez geom.STArea() et cela devient encore plus évident lorsque vous enchaînez les fonctions. L'abandon de l'underscore dans les noms de fonctions n'est qu'un inconvénient mineur.
2). J'ai eu un certain nombre de polygones invalides qui ont été acceptés par le serveur SQL, et l'absence d'une fonction ST_MakeValid peut rendre la tâche un peu pénible.
3). Windows uniquement. En général, les produits Microsoft (comme ceux d'ESRI) sont conçus pour fonctionner très bien les uns avec les autres, mais n'ont pas toujours pour objectifs principaux la conformité aux normes et l'interopérabilité. Si vous gérez un atelier uniquement sous Windows, ce n'est pas un problème.
UPDATE : Après avoir joué un peu avec SQL Server 2012, je peux dire qu'il a été considérablement amélioré. Il y a maintenant une bonne fonction de validation de la géométrie, il y a un bon support pour le type de données Géographie, y compris un objet FULL GLOBE, qui permet de représenter des objets qui occupent plus d'un hémisphère et un support pour les éléments suivants Courbes composées et cordes circulaires qui est utile, entre autres, pour les représentations précises et compactes des arcs (et des cercles). La transformation des coordonnées d'un CRS à un autre doit encore être effectuée dans des bibliothèques tierces, bien que cela ne soit pas un obstacle pour la plupart des applications.
Je n'ai pas utilisé SQL Server avec des ensembles de données suffisamment importants pour pouvoir comparer Postgis/MySQL, mais d'après ce que j'ai vu, les fonctions se comportent correctement et, même si elles ne sont pas aussi complètes que celles de Postgis, elles constituent une amélioration considérable par rapport aux offres de MySQL.
Désolé pour cette longue réponse, j'espère que certaines des douleurs et des joies que j'ai connues au fil des ans pourront être utiles à quelqu'un.
1 votes
PostGIS serait la plus mature des options.
2 votes
PostGIS est de loin la solution SIG la plus mature. Et si vous utilisez R, vous pouvez même utiliser PL/R pour écrire des procédures stockées dans R. Les extensions spatiales de MySQL sont assez minces et ne valent pas la peine d'être essayées, les possibilités SIG de SQL Server sont assez nouvelles et semblent quelque peu limitées, mais je n'ai pas encore d'expérience avec elles.
11 votes
Excellente et importante question. Les opinions fondées sur des faits sont précieuses. N'aurait pas dû être fermée.
1 votes
C'est comme s'il y avait un prix pour fermer les fils de discussion sur SO. Il existe de nombreuses questions valables qui demandent une opinion et une expérience étayées par des références. Plutôt que de fermer la question sur la base d'une attente préjudiciable de réponses de mauvaise qualité, pourquoi ne pas modérer les réponses de mauvaise qualité si et quand elles apparaissent.
0 votes
Oui. De plus, la réponse acceptée date maintenant de 8,5 ans. La pensée a-t-elle évolué depuis lors ? Une nouvelle réponse serait-elle meilleure aujourd'hui ?