2014-06-09 14 views
8

Mi sto preparando a creare un'app per Android/iOS che richiederà la creazione di query geospaziali complesse di poligono e contenimento. Mi piace Apache Cassandra non un singolo punto di errore, tolleranza agli errori e consapevolezza del data center. Cassandra non ha il supporto diretto per le query geospaziali (di cui sono a conoscenza) ma MongoDB e Couchbase Server lo fanno. MongoDB ha problemi di ridimensionamento e non sono sicuro che Couchbase sarebbe un'alternativa migliore di Cassandra con Solr o Elasticsearch.Come si eseguono query geospaziali su scala con NoSQL?

Sarebbe un errore andando con Datastax Enterprise (DSE), Cassandra e Elasticsearch su Couchbase Server? Ci sarà una differenza notevole nei tempi di caricamento per le pagine Web con il backend di Cassandra/ES vs. Couchbase?

+4

Stai chiedendo qui un elenco di domande, alcune delle quali duplicano altre domande (http://stackoverflow.com/questions/22868588/is-there-a-reason-that-cassandra-doesnt-have-geospatial-support) e alcuni dei quali sono "principalmente basati su opinioni". Hai cercato altre domande SO simili? –

+0

Si può fare con successo con Cassandra? – Louisrr

+2

* Può * essere fatto con Cassandra? Probabilmente sì. Può essere fatto * più facile e/o più efficiente * usando un'altra tecnologia? Dipende dalle tue capacità. – Philipp

risposta

4

Aerospike ha appena rilasciato Server Community Edition 3.7.0, che include gli indici geospaziali come funzionalità.

Aerospike ora può archiviare oggetti GeoJSON ed eseguire varie query, consentendo a un'applicazione di tenere traccia di oggetti Geospatial che cambiano rapidamente o semplicemente di porre la domanda su "cosa c'è vicino a me". Internamente, utilizziamo la libreria S2 di Google e Geo Hashing per codificare e indicizzare questi punti e regioni. I seguenti tipi di query sono supportati:

  • punti all'interno di una Regione
  • Points entro un raggio
  • Regioni un punto è in

Questo può essere combinato con una funzione definita dall'utente (UDF) per filtrare i risultati, ad esempio per perfezionare ulteriormente i risultati includendo solo Bar, Ristoranti o Luoghi di culto vicino a te, anche quelli che sono attualmente aperti o disponibili. Inoltre, trovare un punto della regione è consentire, ad esempio, a un inserzionista di capire le regioni della campagna in cui si trova l'utente mobile e quindi inserire un annuncio con targeting geospaziale.Internamente, vengono utilizzati gli stessi meccanismi di archiviazione, che consentono letture e scritture altamente concorrenti ai dati Geospatial o ad altri dati presenti nel record. I dati geospaziali sono molto divertenti, quindi abbiamo incluso una serie di esempi basati su Open Street Map e sui dati della sfida del set di dati di Yelp.

Geospatial è una funzionalità sperimentale nella versione 3.7.0. È pensato per gli sviluppatori per provare e fornire feedback. Riteniamo che le API siano buone, ma in una funzione sperimentale, basata sul feedback della community, Aerospike può scegliere di modificare queste API nel momento in cui questa funzione è GA. Al momento non è destinato all'uso di produzione (anche se sappiamo che alcuni sviluppatori andranno direttamente alla produzione ...)

+1

Penso che l'indice geospaziale sia ora incluso nella versione standard di Aerospike. Ora lo sto eseguendo come un sistema di coinvolgimento per un'applicazione abilitata ai dati geospaziali. – Louisrr

+0

Questo è corretto. La funzionalità geospaziale è diventata generalmente disponibile (GA) con il rilascio del server Aerospike v3.8.1 ad aprile 2016: http://www.aerospike.com/blog/aerospike-3-8-release/ – Mnemaudsyne

0

Stai facendo alcune domande, come è stato sottolineato. Il link fornito offre una risposta potenziale a come le operazioni geospaziali generiche potrebbero essere implementate utilizzando Cassandra. Offrirò una risposta possibile usando costrutti semplici di Cassandra fuori dalla scatola.

  1. Utilizzando geohashes (o quad trees), o qualcosa di simile, creare un indice di geohashes e dei loro poligoni associati. La relazione specifica e i livelli di precisione dipendono dal set di dati e dai casi d'uso.

  2. Per determinare quali poligoni si intersecano con un dato punto o poligono, prima calcolare i suoi geohash (es), quindi osservare quei geohash nell'indice. Per la vicinanza generale, questo potrebbe essere sufficiente. In entrambi i casi, questo restringe i potenziali punti di intersezione fino a un set gestibile.

+2

Ok, quindi ho trovato la risposta alla mia domanda e una buona soluzione è Aerospike. Aerospike è un database in-memory computing (IMC), chiave/valore (NoSQL) che scrive in modo asincrono su dischi a stato solido (SSD). Aerospike ha una versione del suo database IMC che include indici geospaziali e abilita query geospaziali veloci in beta. Ora ho questo database installato sul mio account AWS ora. http://www.aerospike.com/ – Louisrr

+1

@Louisrr Sei ancora soddisfatto? Sto affrontando lo stesso tipo di problema (e considerando gli stessi database - non avevo sentito parlare di aerospike). – nha

+1

Ci scusiamo per il lungo tempo di risposta. Sì Aerospike 3.8+ è solido e include l'indice geospaziale per effettuare query geospaziali su larga scala. Se hai bisogno di tempi di risposta inferiori a 10 millisecondi, usa Aerospike e una tecnologia server veloce come C, GO, Node o C++ ([Seastar] (http://www.seastar-project.org/)) – Louisrr

0

Redis è probabilmente una delle migliori alternative. Al momento attuale è necessario utilizzare Redis Unstable 3.2. La performance è eccezionale. Ho usato questo con il client Java di lattuga e ho visto risultati incredibili. Più grande è il raggio diminuirà le prestazioni.

http://redis.io/commands/geohash

+1

Ho usato Redis al lavoro uno notte con SpringBoot e non è un vero database. Regis è essenzialmente un server di strutture dati ed è veloce, ma credo che Aerospike sia più veloce. – Louisrr

3

Aerospike fornisce una comprovata soluzione altamente scalabile NoSQL. La query geospaziale è stata recentemente aggiunta e una versione di Early Adopter è stata appena announced. Potresti voler controllare.

Problemi correlati