2012-03-25 2 views
-1

Ich bin auf der Suche nach einer Datenbank, die 2 Geospatial-Indizes implementiert oder eine effiziente Simulation ermöglicht.Gibt es eine Datenbank, die 2 Geodatenindizes unterstützt?

Motivation: unsere Anwendung beschäftigt sich mit Vektoren, anstatt Orte und wir müssen oft alle Datensätze suchen, wo die Quelle in der Nähe von etwas ist und das Ziel in der Nähe von etwas anderem ist.

Mongodb hat es nicht. Gibt es eine Datenbank, die das tut?

Vielleicht könnte es mit der mongodb map reduce-Funktion simuliert werden, wobei die Datenbank alle Datensätze auffindet, die die Quellbeschränkung erfüllen, und sie dann durch die map-reduce weiterleitet, um auch die Zielbedingung zu erfüllen. Hat es jemand gemacht?

Danke.

+0

Dies ist nicht möglich - die map/reduce-Funktion kann kein Array aufnehmen, was beim Zeigen auf Geospatialkoordinaten zwangsläufig erforderlich ist. – Barrie

+0

Der Map-Reduce-Key ist die Record-ID, nicht die Koordinaten. Das Problem besteht darin, die Kartenfunktion zu berechnen, wo ich prüfen muss, ob die zweite Koordinate innerhalb einer Region liegt, ich habe keine Ahnung, wie ich das machen soll, und ich fürchte, es wird die Leistung zerstören. – mark

+0

Irgendwelche Erklärungen für das Downvoting? – mark

Antwort

1

Es könnte möglich sein, dies mit MapReduce in Mongo zu fälschen, aber dies wäre nur für die Verwendung als Batch-Job geeignet und wahrscheinlich nicht gut als Abfrage auf Anwendungsebene.

Eine Problemumgehung wäre, die Quell- und Zielpunkte in separaten Mongo-Sammlungen zu speichern. Dann könnten Sie eine Abfrage für die Quellauflistung mit $ near ausführen, um die nächsten Punkte zum Quellpunkt zu ziehen, dann eine weitere $ near-Abfrage für die Zielauflistung durchführen und die Schnittmenge im Speicher berechnen.

Eine weitere Option: Da Sie mit dem Geospatial-Index ein Feld indexieren können, das ein Array von Punkten enthält, speichern Sie den Quell- und den Zielpunkt als Elemente in einem Array. Geben Sie dann zwei Abfragen an diese Sammlung aus (eine für den Quellpunkt, eine für das Ziel) und scannen Sie durch die beiden Ergebnismengen, um das Endergebnis zu berechnen (die Abfragen unterscheiden nicht zwischen der Übereinstimmung der Quelle und dem Ziel). also müsstest du das auf der Client-Seite überprüfen).

Verwandte Themen