2010-03-31 7 views
8

Ich entwerfe eine Anwendung, die geometrische Formen in einer Datenbank speichern muss. Ich habe das Datenbankverwaltungssystem noch nicht gewählt.Benötige ich einen räumlichen Index in meiner Datenbank?

In meiner Anwendung haben alle Datenbankabfragen eine Bounding-Box als Eingabe, und als Ausgabe möchte ich alle Formen innerhalb dieser Datenbank. Ich weiß, dass Datenbanken mit einem räumlichen Index für diese Art von Anwendung verwendet werden. Aber in meiner Anwendung gibt es nicht irgendwelche Abfragen des Typs "geben Sie mir Objekte in der Nähe von x/y" oder andere komplexere Abfragen, die in einer GIS-Anwendung nützlich sind.

Ich plane eine Datenbank ohne einen räumlichen Index zu haben und haben Abfragen aussehen wie:

SELECT * FROM shapes WHERE x < max_x AND x > min_x AND y < max_y AND y > min_y 

und haben einen Index auf den Säulen x (double) und y (double). Solange ich sehen kann, brauche ich nicht wirklich eine Datenbank mit einem räumlichen Index, wie auch immer meine Anwendung dieser Art von Anwendungen ähnlich ist.

Und selbst wenn ich in der Nähe Abfragen haben möchte, dann könnte ich eine ausreichend große Bounding Box um diesen Punkt erstellen. Oder führt dies zu schlechten Leistungen?

Benötige ich wirklich eine räumliche Datenbank? Und wann ist ein räumlicher Index benötigt?

EDIT: Die Suchanfragen tatsächlich ein wenig weiter fortgeschritten als die, die ich oben geschrieben habe, da ich mit geometrischen Formen beschäftigen werde ich Eingabe eine Bounding-Box, die mehrere Formen (mit Begrenzungsrahmen) zurückkehren wird, dass sind innerhalb oder stören die Box in der Abfrage. Aber ich denke immer noch, dass ich dies ohne einen räumlichen Index tun kann, nachdem ich alle guten Antworten gelesen habe.

+0

Was sind die "Kosten" für die Verwendung von Postgis oder Spatiallit? Ich verstehe nicht, warum du sie nicht benutzen willst. – TheSteve0

+0

@ TheSteve0: Ich habe nicht entschieden, welche dbms ich noch verwenden werde. Aber ich möchte mich nicht auf einen mit einem räumlichen Index beschränken. Vielleicht gehe ich für eine verteilte NoSQL-Datenbank anstelle eines RDBMS. – Jonas

+0

Nun, was ist Ihr Anwendungsfall - wenn es Ihnen nichts ausmacht – TheSteve0

Antwort

2

Benötige ich wirklich eine räumliche Datenbank?

Es sieht aus wie das, was Sie tun, wird für Ihre Anwendung gut funktionieren.

Und selbst wenn ich möchte in der Nähe von Abfragen haben, dann könnte ich einen groß genug Begrenzungsrahmen um diesen Punkt erstellen.

Sie können stattdessen einen Index auf einem Geohash erstellen erstellen. Diese Methode wird für die Indexierung geo-räumlicher Punkte in der Google App Engine empfohlen, z. B. wenn die Indexierungsfunktionen eingeschränkt sind. (Source)

Und wann ist ein räumlicher Index benötigt?

Es gibt viele Szenarien, in denen ein räumlicher Index nützlich ist. Zuallererst können räumliche Indizes nicht nur mit Punkten, sondern auch mit Polylinien, Polygonen und anderen Formen arbeiten. Darüber hinaus gibt es, wie Sie bereits erwähnt haben, viele komplexe Abfrageoperationen, die auf räumliche Daten angewendet werden können, wobei ein richtiger räumlicher Index von wesentlicher Bedeutung wäre.

+0

Danke! Der Geohash sieht sehr gut aus, danke für den Link. Ja, meine Datenbank wird sich nicht nur mit Punkten beschäftigen, sondern auch mit Polygonen und Linien. Aber die Suchanfragen werden nur auf Begrenzungsrahmen sein. – Jonas

2

Nein, Sie benötigen keinen räumlichen Index dafür.

Räumliche Indizes werden für die Berechnung der Entfernung zwischen Objekten benötigt, um zu sehen, ob ein Punkt in einem bestimmten Radius von einem anderen Punkt liegt, usw., vor allem, wenn Sie geographische Koordinaten berücksichtigen müssen. Südliche Hemisphäre, nördliche Hemisphäre, etc ... alles ändert die Distanz etwas, wenn man die Erdkurve in Betracht ziehen muss.

Wenn Sie immer nach x und y suchen, profitieren Sie von einem Index für beide Elemente gleichzeitig. Also ... kein Index für Spalte x und ein Index für Spalte y, sondern ein Index für Spalte x und y kombiniert.

+0

Danke für die Erklärung und den Vorschlag eines kombinierten Indexes. – Jonas

1

Wenn Sie nicht über das hinausgehen, was Sie bereits tun, brauchen Sie weder einen räumlichen Index noch ein GIS. Ich würde jedoch sorgfältig überlegen, was Ihre Anforderungen sind und die Chancen, dass die Anwendung wächst, ein GIS-System benötigen. Es ist besser als früher für diesen Übergang zu planen.

GIS bietet Ihnen mehrere Vorteile. Erstens hat ein GIS eine spezielle Formspalte zum Speichern aller benötigten Informationen über eine Geometrie. Er verwaltet räumliche Referenzen, koordiniert Metadaten usw. Ein GIS bietet leistungsfähige Methoden zum Abfragen der Daten basierend auf räumlichen Beziehungen und zum Ändern der Geometrien (Vereinigungen, Extraktionen, Puffer usw.). Es behandelt Punkte, Linien, Polygone usw. Sie können neue Formen aus topologischen Operationen ableiten. Außerdem bieten fast alle GIS-Systeme Mittel zum Rendern der Daten (das hängt wirklich davon ab, welches GIS Sie wählen, aber wenn es vorhanden ist, erspart es Ihnen viel Arbeit).

Sie benötigen räumliche Indizes nur, wenn Sie eine echte GIS-Umgebung haben.Wenn Sie eine GIS-Umgebung auswählen, verwenden Sie räumliche Indizes. Sie möchten einfach nicht ohne sie arbeiten.

+0

Danke! Ich werde meine Bewerbung sorgfältig gestalten. Ich werde versuchen, die erweiterten Verfahren in der Front-End-Software beizubehalten und den Backend-Speicher einfach zu halten, damit ich einfach skalieren kann. – Jonas

2

Um zu den vorhandenen exzellenten Antworten hinzuzufügen, ist die Leistung hier möglicherweise nicht wichtig.

Wenn Sie eine räumliche Indexbereichsabfrage simulieren, indem Sie zwei Bereichsabfragen für x- und y-Achsen ausführen und die Schnittmenge der Ergebnisse verwenden, werden zwei Abfragen ausgeführt, die möglicherweise wesentlich mehr Daten zurückgeben als vor der Schnittmenge erforderlich.

Auf der anderen Seite wird solche Abfrage nativ von einem räumlichen Index unterstützt und als solche effizient beantwortet werden.

Wenn Ihre räumlichen Abfragen den Engpass darstellen, müssen Sie einen räumlichen Index verwenden.