2014-01-10 11 views
14

Ι habe eine Datenbank, wo meine Dokumente nur Points sind. Ich überlege, einen Geodatenindex hinzuzufügen. Also kann ich entweder aus einer 2dsphere und einer 2d wählen.2Dsphere vs 2D-Index: Was ist "besser"/schneller?

MongoDB.org hat:

2dsphere Indizes unterstützen:

- Calculations on a sphere 
- Both GeoJSON objects and legacy coordinate pairs 
- A compound index with scalar index fields (i.e. ascending or 
    descending) as a prefix or suffix of the 2dsphere index field 

2d Indizes unterstützen:

- Calculations using flat geometry 
- Legacy coordinate pairs (i.e., geospatial points on a flat 
    coordinate system) 
- A compound index with only one additional field, as a suffix of 
    the 2d index field 

Da jedoch alle meine Dokumente Punkte kann ich entweder Eins der Optionen unten in meinem Schema ohne viel Unterschied.

für 2dsphere:

location : { 
     type : "Point" , 
     coordinates : [10,45] 
} 

oder für 2d Index:

location : [10,45] 

Meine Frage kommt zu dem man schneller ist? Ich habe wirklich keine Ahnung, wie ich es messen soll.

Die Frage geht davon aus, dass ich nur ein Quadrat box von Daten abfragen wollen und kümmern sich nicht für komplexe Polygon gesucht: Entweder mit $box die nur durch den 2D-Index unterstützt wird oder mit dem $polygon Methode (wenn ich richtig gelesen) $geoWithi n wird von beiden Indizes unterstützt.

+0

Warum Sie mit beiden Indizes Typen/Abfragen und einige Daten in einem dev/Staging-Umgebung nicht testen? Sie sollten die Leistung über mehrere Iterationen hinweg mitteln, um sicherzustellen, dass die Daten in den Arbeitsspeicher geladen werden, und es gibt einen faireren Vergleich. Ich erwarte, dass es vorzuziehen ist, den neueren '2dsphere' Index zu verwenden, aber ich habe keinen Leistungsvergleich gesehen. – Stennie

Antwort

3

Zusätzlich zu den Untersuchungen, die Sie bereits durchgeführt haben, wollte ich nur einen weiteren Unterschied hinzufügen, den ich zwischen diesen beiden Indizes gefunden habe.

Standardmäßig verwendet ein 2D-Index für Legacy-Koordinatenpaare 26 Genauigkeitsbits. Dies entspricht ungefähr einer Genauigkeit von 2 Fuß oder 60 Zentimetern unter Verwendung des Standardbereichs von -180 bis 180. Die Präzision wird anhand der Größe in Bits gemessen der Geohash-Werte, die zum Speichern von Standortdaten verwendet werden. Sie können Geospatial-Indizes mit einer Genauigkeit von bis zu 32 Bits konfigurieren.

db.<collection>.ensureIndex({<location field> : "<index type>"} , { bits : <bit precision> })

Quelle: MongoDB doc reference

Verwandte Themen