2014-01-20 4 views
7

Ich muss schnelle Abfragen durchführen, um alle Dokumente innerhalb eines bestimmten GPS-Radius eines Punktes zu finden. Der Radius ist klein und die Genauigkeit ist nicht so kritisch, daher muss ich die sphärische Geometrie nicht berücksichtigen. Es wird viele Schreiben geben. Werde ich mit einem 2d-Index eine bessere Leistung erzielen als mit einer 2Dsphere?2Dsphere vs 2D Index Leistung

Antwort

11

Wenn Sie definitiv keine sphärische Geometrie oder mehr als ein Feld in einem zusammengesetzten Geo-Index benötigen (siehe die Hinweise auf Geospatial Indexes im MongoDB-Handbuch), wäre ein 2d Index geeigneter. Es wird auch einen leichten Speichervorteil beim Speichern von Koordinaten als Legacy-Paare (Längengrad, Breitengrad) anstelle von GeoJSON-Punkten geben. Dies ist wahrscheinlich nicht genug, um Ihre Schreibleistung signifikant zu beeinflussen, aber es hängt davon ab, was Sie mit "vielen Schreibvorgängen" meinen und ob diese Ihre I/O-Grenzen überschreiten.

Ich bin mir nicht sicher über die relative Leistung von Abfragen für verschiedene Geo-Index-Typen, aber Sie können einfach einen repräsentativen Testfall in Ihrer eigenen Entwicklungs-/Staging-Umgebung zum Vergleichen einrichten. Stellen Sie sicher, dass Sie die Messungen über mehrere Iterationen hinweg mitteln, damit Dokumente in den Speicher geladen werden und ein fairer Vergleich möglich ist.

Sie können auch eine haystack index, zu prüfen, die mit einem zusätzlichen Feldkriterien in Kombination führt zurück in einem kleinen Bereich für 2D-Abfragen ausgelegt ist (zum Beispiel „finden Restaurants in der Nähe von Länge, Breite“) . Wenn Sie sich nicht auf die Genauigkeit konzentrieren oder nach Entfernung sortieren (und ein zusätzliches Suchfeld haben), kann dieser Indextyp für Ihren Anwendungsfall gut funktionieren.

+2

Danke, es ist, was ich dachte, aber einige der Mongo docs machen Es klingt wie der 2D-Index ist mehr von der alten Bestimmung. – user1055568

1

2dsphere is now version 3 after MongoDB 3.2

2dsphere ist besser

Daten von https://jira.mongodb.org/browse/SERVER-18056

weitere Details: https://www.mongodb.com/blog/post/geospatial-performance-improvements-in-mongodb-3-2

3.1.6 - 2dsphere V2

"executionTimeMillis": 1875,

"totalKeysExamined": 24335,

"totalDocsExamined": 41848,

Nach indizieren

3.1.6 - 2dsphere V3

"executionTimeMillis": 94,

„totalKeysExamined ": 21676,

" totalDocsExamined ": 38176,

Im Vergleich zu 2d

3.1.6 - 2d

"executionTimeMillis": 359,

"totalKeysExamined": 95671,

"totalDocsExamined": 112.968,