8
votes

Ai-je besoin d'un index spatial dans ma base de données?

Je concevons une application qui doit économiser des formes géométriques dans une base de données. Je n'ai pas encore choisi le système de gestion de la base de données.

Dans ma candidature, toutes les requêtes de base de données auront une boîte de sélection comme entrée et, comme sortie, je souhaite toutes les formes dans cette base de données. Je sais que les bases de données avec un index spatial sont utilisées pour ce type d'application. Mais dans mon application, il y aura pas aucune question de type "donnez-moi des objets à proximité x / y" ou d'autres requêtes plus complexes utiles dans une application SIG.

Je suis Planification d'une base de données sans indice spatial et avoir des requêtes à ressembler à: xxx

et avoir un index sur les colonnes x (double ) et y (double) . Tant que je peux le voir, je n'ai pas vraiment besoin d'une base de données avec un index spatial, mais ma demande est proche de ce type d'applications.

Et même si j'aimerais avoir des requêtes à proximité, puis je pourrait créer une boîte de sélection assez grosse autour de ce point. Ou cela conduira-t-il à une mauvaise performance?

Dois-je vraiment avoir besoin d'une base de données spatiale? et quand un index spatial est nécessaire?

EDIT: Les requêtes de recherche seront effectivement un peu plus avancées que celle que j'ai écrites ci-dessus, car je traite de formes géométriques, je saisirai une boîte de sélection qui retournera plusieurs formes (avec boîte de sélection) qui sont à l'intérieur ou interfèrent avec la case dans la boîte mettre en doute. Mais je pense toujours que je peux le faire sans un index spatial, après avoir lu toutes les bonnes réponses.


4 commentaires

Quel est le "coût" d'utiliser postgis ou spatiallite? Je ne comprends pas pourquoi vous ne voudriez pas les utiliser.


@ Thesteve0: Je n'ai pas décidé de quel SGBD je l'utiliserai encore. Mais je voudrais ne pas être limité à un avec un index spatial. Peut-être que je vais pour une base de données NOSQL distribué d'un SGBDM.


Bien quel est votre cas d'utilisation - si cela ne vous dérange pas de partager


Je voudrais créer un service Web qui échoue bien. Je pense que je pense utiliser la Mnésique comme base de données, mais il n'a pas d'index spatial.


4 Réponses :


2
votes

Non, vous n'avez pas besoin d'un index spatial pour cela.

Les indices spatiaux sont nécessaires pour calculer la distance entre les objets, voir si un point se situe dans un certain rayon d'un autre point, etc ... surtout lorsque vous devez prendre en compte les coordonnées géographiques. Hémisphère sud, hémisphère nord, etc ... tout change la distance un peu lorsque vous devez prendre la courbe de la Terre.

Si vous recherchez toujours X et Y que vous bénéficierez d'avoir un index sur les deux articles en même temps. Donc ... pas un index sur la colonne x et un index sur la colonne Y, mais un index sur la colonne X et Y combinée.


1 commentaires

Merci pour l'explication et la suggestion d'un indice combiné.



1
votes

Si vous n'êtes pas au-delà de ce que vous faites déjà, vous n'avez pas besoin d'un indice spatial ni d'un SIG à ce sujet. Cependant, j'examinerais soigneusement quelles sont vos exigences et que les chances de l'application poussent à avoir besoin d'un système SIG. Il vaut mieux que le plan plus tôt que plus tard pour cette transition.

GIS vous donne plusieurs avantages. Premièrement, un SIG a une colonne de forme spéciale pour stocker tout ce dont vous avez besoin d'une géométrie. Il gère la référence spatiale, coordonner les métadonnées, etc. Un SIG fournit des méthodes puissantes pour interroger les données basées sur des relations spatiales et modifier les géométries (syndicats, extractions, tampons, etc.). Il gère des points, des lignes, des polygones, etc. Vous pouvez dériver de nouvelles formes des opérations topologiques. De plus, presque tous les systèmes SIG fournissent des moyens pour rendre les données (cela dépend vraiment de ce que vous choisissez, mais lorsqu'il est présent, cela vous permet d'économiser des tonnes de travail).

Vous n'aurez besoin que d'index spatiaux si vous avez un véritable environnement SIG. Si vous choisissez un environnement SIG, oui, utilisez des index spatiaux - vous ne voulez vraiment pas travailler sans eux.


1 commentaires

Merci! Je vais concevoir ma demande avec soin. Je vais essayer de conserver les procédures avancées dans le logiciel frontal et de garder le stockage en arrière simple, afin que je puisse faire échelle facile.



2
votes

Est-ce que j'ai vraiment besoin d'une base de données spatiale?

Cela ressemble à ce que vous faites fonctionnera bien pour votre application.

Et même si j'aimerais avoir Requêtes à proximité, puis je pourrais créer un assez grosse boîte de sélection autour de cela point.

Vous voudrez peut-être envisager de créer un index sur un Geohash à la place. Cette méthode est recommandée pour l'indexation des points géo-spatiaux sur le moteur d'applications Google, par exemple, où les fonctions d'indexation sont limitées. ( source )

et quand un indice spatial est-il nécessaire?

Il existe de nombreux scénarios où un indice spatial est utile. Tout d'abord, les index spatiaux peuvent traiter non seulement des points, mais avec des polylines, des polygones et d'autres formes. De plus, comme vous l'avez déjà mentionné, de nombreuses opérations de requête complexes peuvent être appliquées sur des données spatiales, où un indice spatial approprié serait essentiel.


1 commentaires

Merci! La Geohash est très bonne, merci pour le lien. Oui, ma base de données traitera également non seulement des points, mais également des polygones et des lignes. Mais les requêtes de recherche ne seront que sur des zones de liaison.



2
votes

Pour ajouter aux excellentes réponses existantes, la performance pourrait ou pourrait ne pas être importante ici.

Si vous simulez une requête de plage d'index spatiale en faisant deux requêtes de gamme pour les axes X et Y et en prenant l'intersection des résultats, vous faites deux questions qui pourraient renvoyer beaucoup plus de données que nécessaire avant l'intersection.

D'autre part, cette requête est prise en charge de manière nativement prise en charge par un indice spatial et à ce titre, il sera répondu efficacement.

Dans l'ensemble, si vos requêtes spatiales sont le goulot d'étranglement, vous devrez utiliser un index spatial.


0 commentaires