Wie führe ich Geospatial-Abfragen im Maßstab mit NoSQL aus?

8

Ich bereite mich darauf vor, eine Android / iOS-App zu erstellen, die komplexe geographische Abfragen für Polygone und Containment erfordert. Ich mag Apache Cassandra's kein Single Point of Failure, Fehlertoleranz und Rechenzentrumsbewusstsein. Cassandra hat keine direkte Unterstützung für geospatial Abfragen (die ich kenne), aber MongoDB und Couchbase Server tun. MongoDB hat Skalierungsprobleme und ich bin mir nicht sicher, ob Couchbase eine bessere Alternative als Cassandra mit Solr oder Elasticsearch wäre.

Würde ich einen Fehler machen, wenn ich mit Datastax Enterprise (DSE), Cassandra und Elasticsearch über Couchbase Server gehe? Wird es bei Webseiten mit dem Cassandra / ES-Backend vs. Couchbase einen deutlichen Unterschied in der Ladezeit geben?

    
Louisrr 09.06.2014, 13:18
quelle

4 Antworten

4

Aerospike hat gerade die Server Community Edition 3.7.0 veröffentlicht, die Geospatial Indexes als Feature enthält.

Aerospike kann jetzt GeoJSON-Objekte speichern und verschiedene Abfragen ausführen, so dass eine Anwendung sich schnell ändernde Geospatial-Objekte verfolgen oder einfach die Frage "Was ist in meiner Nähe" stellen kann. Intern verwenden wir die S2-Bibliothek von Google und Geo Hashing, um diese Punkte und Regionen zu kodieren und zu indizieren. Die folgenden Arten von Abfragen werden unterstützt:

  • Punkte innerhalb einer Region
  • Punkte innerhalb eines Radius
  • Regionen, in denen ein Punkt liegt

Dies kann mit einer benutzerdefinierten Funktion (User Defined Function, UDF) kombiniert werden, um die Ergebnisse zu filtern, dh um die Ergebnisse so zu verfeinern, dass nur noch Bars, Restaurants oder Orte der Anbetung in Ihrer Nähe enthalten sind . Durch das Auffinden der Region, in der sich ein Punkt befindet, kann beispielsweise ein Werbetreibender Kampagnenregionen ermitteln, in denen sich der mobile Nutzer befindet - und daher eine geografisch ausgerichtete Werbung platzieren. Intern werden die gleichen Speichermechanismen verwendet, die hochgradig gleichzeitige Lese- und Schreibvorgänge für die Geodaten oder andere im Datensatz enthaltene Daten ermöglichen. Geodaten sind eine Menge Spaß, mit denen wir spielen können. Deshalb haben wir eine Reihe von Beispielen auf der Basis von Open Street Map- und Yelp Dataset Challenge-Daten aufgenommen.

Geospatial ist ein experimentelles Feature in der Version 3.7.0. Es ist für Entwickler gedacht, um es auszuprobieren und Feedback zu geben. Wir denken, dass die APIs gut sind, aber in einer experimentellen Funktion, basierend auf dem Feedback der Community, könnte Aerospike diese APIs modifizieren, wenn diese Funktion GA ist. Es ist momentan nicht für die Produktion gedacht (obwohl wir wissen, dass einige Entwickler direkt zur Produktion gehen werden ...)

    
Mnemaudsyne 15.12.2015, 19:33
quelle
3

Aerospike bietet eine bewährte, hochskalierbare NoSQL-Lösung. Geospatial Abfrage wurde kürzlich hinzugefügt, und eine Early Adopter Release wurde gerade angekündigt . Vielleicht möchten Sie das überprüfen.

    
Alvin R 01.12.2015 19:21
quelle
0

Sie haben einige Fragen gestellt, worauf hingewiesen wurde. Der bereitgestellte Link bietet eine mögliche Antwort darauf, wie generische geospatiale Operationen mit Cassandra implementiert werden könnten. Ich werde eine mögliche Antwort mit einfachen gebrauchsfertigen Cassandra-Konstrukten anbieten.

  1. Verwenden von Geohashes (oder Quad-Bäume ) oder etwas Ähnliches, erstellen Sie einen Index von Geohaden und den dazugehörigen Polygonen. Die spezifische Beziehung und Genauigkeitsstufe (n) hängt von Ihrem Datensatz und Anwendungsfall ab.

  2. Um zu bestimmen, welche Polygone sich mit einem gegebenen Punkt oder Polygon schneiden, berechnen Sie zuerst dessen Geohash (es), und dann schauen Sie diese Geohade im Index nach oben. Für die allgemeine Nähe kann dies ausreichend sein. So oder so werden die möglichen Schnittpunkte auf eine überschaubare Menge reduziert.

rs_atl 10.06.2014 18:56
quelle
0

Redis ist wahrscheinlich eine der besten Alternativen. Zum gegenwärtigen Zeitpunkt müssten Sie Redis Instable 3.2 verwenden. Die Leistung ist hervorragend. Ich benutze dies mit dem Salat-Java-Client und habe unglaubliche Ergebnisse gesehen. Je größer der Radius, desto geringer die Leistung.

Ссылка

    
Chris Hinshaw 30.11.2015 21:44
quelle