Was ist der beste Weg, um eine Datenbank für Datensätze innerhalb n Meilen eines Postleitzahl abgefragt werden?

StackOverflow https://stackoverflow.com/questions/527512

Frage

Ich habe eine Liste von Datensätzen in der Datenbank und jeder Datensatz mit einer Postleitzahl zugeordnet ist.

Was ist die „Best-Practice“ für alle Datensätze in der Datenbank abfragt alle Einträge zu finden, die innerhalb der n Meilen eines anderen Postleitzahl sind?

Jeder Postleitzahl hat eine Länge / Breite mit ihm in der Datenbank zugeordnet, damit ich weiß, ich werde, dass verwenden. Allerdings kann ich mir nicht vorstellen, jede Art von Abstandsformel die auf jedes Paar von Postleitzahlen, die Umwandlung in Meilen und die Ablehnung, die nicht in meinem Radius lief.

Das scheint furchtbar rechnerisch teuer für eine solche gemeinsame Abfrage.

Ich habe auch eine All-Paare Pre-Berechnung berücksichtigt zu tun, aber es scheint zu groß auch zu berücksichtigen. Es gibt ungefähr ~ 40.000 Postleitzahlen in den USA. Also, ein alle Paare Datenbank jedes Postleitzahl wäre (40.000) ^ 2 oder 1,6Mrd Einträge.

Ich weiß, das ist ein häufiges Problem auf Websites ist so hoffentlich jemand mich in der richtigen Richtung für den besten Weg zu zeigen. Ich bin mit SQL Server 2008 und wenn es vorgefertigte Lösungen gibt dann groß, weil ich wirklich nicht das Rad in diesem Fall neu erfinden will .


Verwandte Frage: bekommen alle Postleitzahlen innerhalb des Radius (das half mir nicht)
Außerdem weiß ich, dieses Source Projekt, aber es ist verfallenen und nicht mehr in Gebrauch ist.

War es hilfreich?

Lösung

Ich würde eine Abfrage, die alle Datensätze in der quadratischen Hülle encompasing die radiale Suche Kreis klammert zurück (minlat

Wenn Sie wollten Lust bekommen, unterstützt SQL Server räumlichen Indizes .

Andere Tipps

Ich betreiben einer Website, die diese Abfrage etwa einmal pro Sekunde pro Benutzer ausgeführt werden muss, und hier ist das, was ich gelernt habe:

Zunächst einmal sicher, dass Ihr Standort Tabellenindizes auf Lat und Lon hat. Das ist der Unterschied zwischen 20ms und 15s Reaktionszeiten, wenn Sie Millionen von Datensätzen haben.

mit einem Begrenzungskasten Abfrage Beginnen Sie eine Reihe von Orten, um zu arbeiten. Dann berechnen Entfernungen auf diejenigen, sortieren und wenn Sie Genauigkeit pingelig sind, dann filtern, um ein paar aus.

Ehrlich gesagt, würde ich keine Sorgen darüber, etwas vorge berechnen. Wie ich schon sagte, ich laufe diese Art der Abfrage für eine Standorttabelle mit 6.000.000 Einträge, und es gibt in der Regel Ergebnisse in <50ms. Je nach Bedarf, das wirklich irgendetwas schnell genug zu sein.

Viel Glück!

Das ist in der Tat ein sehr schwieriges Problem zu lösen. Ich würde Ihnen empfehlen, einige betrügen tun, indem Sie eine Datenbank vorge zu schaffen. Erstellen Sie ein Raster von welcher Art von Nähe Sie finden müssen, zum Beispiel, nehmen alle 10 Meilen in jede Richtung, fügen Sie in der Datenbank einen Eintrag für jeden Reißverschluss für diesen Rasterpunkt und dem Abstand, und dann, wenn eine Abfrage in kommt, Sie übersetzen zunächst die Abfrage Punkt zu einem Ihrer Rasterpunkten. Jetzt können Sie den Abstand ganz leicht nachzuschlagen.

Diese Lösung bedeutet im Grunde Handel Raum für Zeit, so können Sie schnell eine recht große Datenbank erhalten. Die gute Nachricht ist. Es ist sehr einfach, Daten zu indizieren

Sie sollten sehen GeoNames.org . Sie können ihre webservice rel="nofollow, was Sie suchen, oder Sie können dl thier Datenbank.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top