Ich baue eine App (in XCode), die im Allgemeinen Informationen für Benutzer anzeigt. Die Informationen werden als einzelne Objekte in einer Datenbank gespeichert (dies ist ein Parse-Server, der von Heroku gehostet wird). Der Benutzer kann festlegen, dass Informationen, die innerhalb einer festgelegten Entfernung von ihrem aktuellen Standort erstellt wurden, "gesehen" werden. (Die Informationen werden, wenn sie in der DB gespeichert werden, zusammen mit ihren Breiten und lange basierend auf dem Standort des Benutzers gespeichert, wenn sie das Speichern begonnen haben). Ich weiß, dass ich die Teile der Information filtern kann, indem ich ihr lat und lang mit dem gegenwärtigen Lat und dem langen des Betrachtungsbenutzers vergleiche und nur jene vorführe, die nah genug sind. Grob / allgemein:
%Vor%Dies ist anständig genug eingerichtet, und es funktioniert gut. Der Grund, warum es funktioniert, ist jedoch wegen der geringen Anzahl von Einträgen in der DB zu diesem Zeitpunkt (die App ist in Entwicklung). In der praktischen Anwendung (dh viele Benutzer) kann die Datenbank voller Informationsobjekte (sagen wir tausend) sein. Meiner Meinung nach würde es zu lange dauern, um die Breite der Informationen einzeln zu ziehen und zu vergleichen und sie mit der Breite des aktuellen Benutzers für jeden DB-Eintrag zu vergleichen. Ich weiß, dass es einen Weg geben muss, dies rechtzeitig zu tun (denke Zunder ... sie zeigen nur Profile von Menschen, die in der Nähe sind und es dauert nicht so lange, bis sie das trotz Millionen von Profilen tun) aber ich weiß nicht, was am effizientesten ist. Ich dachte daran, separate Abschnitte für verschiedene geografische Regionen in der DB zu erstellen und dann nur diesen bestimmten Abschnitt der DB zu durchsuchen, abhängig davon, wo der aktuelle Standort des Benutzers ist, aber dies scheint nicht ausgereift und würde immer noch zu großen Informationsmengen führen. Was ist der beste Weg, dies zu tun?
Pro Bereitstellen eines Parse Servers auf Heroku können Sie Installieren Sie ein MongoDB-Add-on oder ein anderes der Datenspeicher in der Add-On-Kategorie , in denen Sie Geospatial-Indizes und Abfragen , die speziell vorgesehen sind für diese Art von Anwendung .
Gibt es einen Grund, warum Sie diese Art der Überprüfung auf der Clientseite durchführen müssen? Ich würde vorschlagen, Ihre Koordinaten an Ihren Server zu senden und dann den Server Ihre Datenbank mit diesen Koordinaten abfragen zu lassen und herauszufinden, welche Gegenstände basierend auf den gegebenen Koordinaten zu ziehen sind. Dann können Sie veranlassen, dass der Server auf die Clientseite zurückkehrt, je nachdem, welche Elemente diesem Benutzer "nahe" waren.
EDIT: umformuliert