Kurz gesagt,
- Was sollte der Datentyp für Längen- und Breitengrad sein?
- Welchen SQL-Befehl sollte ich aufrufen, um beispielsweise die ersten 100 nächstgelegenen Restaurants abzurufen?
Detail:
Ich habe jeweils 100.000 Geschäftsaufzeichnungen mit Längen- und Breitengraden. Ich sehe, dass MySQL tatsächlich einen Datentyp namens point unterstützt. Soll ich das stattdessen verwenden?
Unterstützt MySQL das KDTree-Speichersystem http://en.wikipedia.org/wiki/File:KDTree-animation.gif
Ist es am besten, den Punktdatentyp anstelle des regulären Float-Datentyps zum Speichern von Latitutude und Longitude zu verwenden?
Schließlich möchte ich Dinge wie die ersten 100 Restaurants finden, die zum Beispiel den Punkten 105,6 am nächsten liegen, und meine Datenbanken enthalten viele Geschäfte und Punkte. Offensichtlich wäre die Berechnung der Entfernung nacheinander für jeden Datensatz und für jeden Punkt O (n) und daher schlecht.
Beachten Sie, dass mir eine einfachere Lösung bekannt ist, die unter Anwendung wie Yelp beschrieben wird. Entfernungsinformationen effizient aus der Datenbank abrufen und diese zunächst auch selbst implementieren. Das ist eine gute Antwort.
Ich denke jedoch, dass es eine Creme der Ernteantwort gibt, die das übertreffen sollte, oder? Tatsächlich ist das Speichern von Standorten basierend auf Breiten- und Längengraden und das Finden von Materialien in der Nähe ein sehr häufiges Problem. Ich erwarte, dass MySQL ein spezielles Entwurfsmuster dafür hat. Hat es das?
Wo kann ich mehr darüber erfahren? Vielen Dank.