Optimaler Spaltentyp für Breiten- und Längengrad auf Rails und MySQL

8

Ich frage mich, was der beste Spaltentyp ist, um Breitengrad / Längengrad auf MySQL + Rails zu speichern.

  • Genauigkeit muss ausreichen, um jedes Bit von Grad / lng Grad zu speichern, das von mobilen Geräten und / oder Geocodern erhalten wird.
  • Die Speicheranforderungen sollten für die beste Abfrageleistung minimal sein.

Aus dem offiziellen Google-Dokument:

Ссылка

  

Mit den aktuellen Zoomfunktionen von   Google Maps sollten Sie nur 6 benötigen   Nachkommastellen.   Um den Speicherplatz für erforderlich zu halten   Ihr Tisch auf ein Minimum, Sie können   spezifizieren Sie das lat und lng   Attribute sind Floats der Größe (10,6).   Dadurch können die Felder 6 speichern   Nachkommastellen, plus bis zu 4   Ziffern vor der Dezimalzahl, z.B.   -123.456789 Grad.

Tatsächlich wird FLOAT(10,6) von Google empfohlen.

Mit Rails 3 scheint es jedoch keinen einfachen Weg zu geben, den FLOAT Spaltentyp mit der Genauigkeit nach dem Dezimalpunkt zu definieren. Zum Beispiel könnten Sie eine Migration mit Raw SQL wie folgt schreiben:

%Vor%

Aber die schema.rb als Konsequenz wird wie folgt aussehen:

%Vor%

fehlt die Genauigkeit für den Bruchteil.

Hier kann ich mehrere Optionen sehen:

  • Verwenden Sie FLOAT(10,6) für optimale Produktionsleistung, und speichern Sie kein Schema (z. B. rake db:test:load ) für die Entwicklung.
  • Verwenden Sie DECIMAL(10,6) , was von Rails unterstützt wird, aber es dauert 6 Bytes, 1,5 mal größer als FLOAT (siehe: Ссылка ). Vielleicht wäre das ein guter Kompromiss?
  • Verwenden Sie DOUBLE , das ist viel geräumiger als die Anforderung von Google und benötigt 8 Bytes, 2-mal größer als FLOAT . Es ist auch einfach.

Was ist Ihre Empfehlung?

    
kenn 15.06.2011, 00:30
quelle

2 Antworten

4

KISS (d. h. an das Framework übergeben), es sind nicht viele Bytes. Es wird nur mehr von Bedeutung sein, wenn Sie bestimmte Indizes verwenden.

    
raggi 15.06.2011, 00:46
quelle
2

Abhängig vom Typ der Abfrage, die Sie für Ihre Daten ausführen möchten, sollten Sie sich den Geometrietyp ansehen:

Ссылка

Ich bin nicht vertraut mit RoR, aber diese Zeile, insbesondere:

%Vor%

... scheint darauf hinzuweisen, dass Sie geospatiale Abfragen ausführen möchten. Wenn dies der Fall ist, wird der Index für alle Absichten und Zwecke nutzlos sein, da ein btree-Index für die Suche nach dem nächsten Nachbarn nicht hilfreich ist.

    
Denis de Bernardy 15.06.2011 01:36
quelle