2016-06-25 8 views
0

Ich bin auf der Suche nach einer NoSQL-Technologie, die die Anforderung erfüllt, geospatial sowie Zeit Abfragen in großem Maßstab mit anständige Leistung zu verarbeiten. Ich möchte mehrere hundert GBs mit der vorgeschlagenen NoSQL-Technologie zusammen mit Spark in TB-Daten verarbeiten. Dies wird offensichtlich auf einem Cluster mit mehreren Knoten ausgeführt.Welche NoSQL-Technologie für Geospatial und Time Queries?

Arten von Anfragen möchte ich ausführen:

  • „normalen“ Abfragen für Attribute wie „Feld < = Wert“
  • Grund geospatial Abfragen wie alle Abfragen von Daten, die innerhalb eines bbox beruht.
  • Zeitabfragen wie „Datum < = 01.01.2011“ oder „time> = 11:00 Uhr und Zeit < = 14.00“
  • eine Kombination aus allen drei Abfragetypen (so etwas wie „Abfrage alle Daten, die wo Lage ist in bbox und Datum 01.01.2011 und Zeit < = 14:00 Uhr und field_x < = 100")

ich zur Zeit der Bewertung, welche Technologien sind möglich für meine usecase aber ich bin überwältigt von der schieren Anzahl der verfügbaren Technologien. Ich habe über populäre Technologien wie MongoDB und Cassandra nachgedacht. Beide scheinen für meinen Anwendungsfall anwendbar zu sein (Cassandra nur mit Stratios Lucene Index), aber es könnte eine andere Technologie geben, die noch besser funktioniert.

Gibt es eine Technologie, die auf der Grundlage dieser Anforderungen stark übertroffen wird?

Antwort

2

Ich möchte Batch-Prozess mehrere hundert GBs zu TBs von Daten

das ist nicht wirklich ein cassandra Anwendungsfall. Cassandra ist zum einen für Schreibleistung optimiert. Wenn Sie eine sehr große Menge an Schreibarbeiten haben, könnte Cassandra eine gute Option für Sie sein. Cassandra ist keine Datenbank für explorative Abfragen. Cassandra ist eine Datenbank für bekannte Abfragen. Auf Leserebene ist Cassandra für sequentielle Lesevorgänge optimiert. Cassandra kann Daten nur sequentiell abfragen. Es ist auch möglich, dies zu ignorieren, aber es wird nicht empfohlen. Riesige Datenmengen könnten mit dem falschen Datenmodell ein Problem in Cassandra sein. Vielleicht ist ein Hadoop basiertes Datenbanksystem eine bessere Option für Sie.

Zeitabfragen wie "Datum < = 01.01.2011" oder "time> = 11:00 Uhr und Zeit < = 14.00"

Cassandra ist wirklich gut für Zeitreihendaten.

„normalen“ Abfragen für Attribute wie „Feld < = Wert“

Wenn Sie die Abfragen, bevor Sie wissen, Modellieren Sie Datenbank, Cassandra ist auch eine gute Wahl.

eine Kombination aller drei Abfragetypen (etwa "alle Daten abfragen, deren Position sich innerhalb der Bbox und am 01.01.2011 und Zeit < = 14:00 Uhr und field_x < = 100")

Cassandra könnte eine gute Lösung sein Warum konnte, wie ich sagte:.? Sie müssen diese Abfragen wissen, bevor Sie Ihre Tabellen erstellen Wenn Sie wissen. dass Sie tausende von Anfragen haben, wo Sie einen Zeitbereich und die Lage (Stadt, Land, Inhalt etc.) benötigen sie eine gute Lösung für Sie sind.

Zeitabfragen in großem Maßstab mit anständiger Leistung.

Cassandra wird die beste p haben Leistung in diesem Anwendungsfall. Die Daten sind bereits in der benötigten Reihenfolge. MonoDB ist ein schöner Ersatz für MySQL-Anwendungsfälle. Wenn Sie eine bessere Skalierung benötigen, aber Skalieren von Mongodb ist nicht so einfach wie in Cassandra, und flexibel und Sie kümmern sich um die Konsistenz. Die Konsistenz von Cassandra ist skalierbar und die Leistung ist sehr wichtig. MongoDB hat auch Beziehungen, Cassandra nicht. In Cassandra wird alles denormalisiert, weil Leistung sich interessiert.

+0

Ich habe über eine Cassandra-Spaltenfamilie nachgedacht, die folgendes enthält: sensor_id, timestamp, location (nicht in jedem Datensatz verfügbar!), Key, value. Dann haben Sie einen Clustering-Schlüssel auf meinem Feld "Schlüssel", so dass ich mehrere Schlüssel/Werte für jeden logischen Log-Eintrag haben kann. Wenn ich nach einem Ort suche, muss ich immer mehr Daten herausziehen, basierend auf dem Zeitstempel der zurückgegebenen Zeitstempel der Geoquery. Zum Beispiel, wenn meine Geoquery einen Datensatz mit dem Datum "25.06.2016-21: 18: 30" zurückgibt, möchte ich auch die letzten -5 und +5 Minuten lesen. Thats, wo sequentielle Lesevorgänge in wirklich handlich kommen könnten. Theres ein Problem, das ich sehe. [1/2] – j9dy

+0

Nicht alle meine Protokolleinträge enthalten den Speicherort. Wenn ich also nach dem Ort frage, zum Beispiel mit einer "in bbox" -Abfrage, bekomme ich vielleicht einen einzelnen Eintrag, der einen Ort enthält. Dies würde erfordern, dass ich zuerst die Geoquery starte, sie abschließen lasse und danach das Datum/Zeit-Feld jedes zurückgegebenen Datensatzes nehme und einen sequentiellen Chunk basierend auf den -5 und +5 Minuten jedes von der Geoquery zurückgegebenen Datums liest. Dann hätte ich die Daten, die ich wirklich brauche. Ich muss auch auf das "Schlüssel" -Feld filtern, zum Beispiel "where key = velocity OR key = whatever". Ist das ein Problem? Gibt es eine Möglichkeit, dies zu beschleunigen? – j9dy

Verwandte Themen