Ich frage mich, was der beste Spaltentyp ist, um Breitengrad / Längengrad auf MySQL + Rails zu speichern.
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:
Aber die schema.rb
als Konsequenz wird wie folgt aussehen:
fehlt die Genauigkeit für den Bruchteil.
Hier kann ich mehrere Optionen sehen:
FLOAT(10,6)
für optimale Produktionsleistung, und speichern Sie kein Schema (z. B. rake db:test:load
) für die Entwicklung. 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? 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?
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.
Tags und Links optimization mysql ruby-on-rails geolocation latitude-longitude