2017-07-10 1 views
0

Ich entwerfe eine Foto-Sharing-App (ortsbasiert). Ich plane, AWS Cognito für Authentifizierung/Autorisierung, DynamoDB für persistente Daten, S3 für Dateispeicher und Lambda + API Gateway für Webdienste zu verwenden. Wie verwende ich DynamoDB für geo-location-basierte Abfragen?

Dies sind die wichtigsten Use-Cases/Zugriffsmuster (außer Sign-up/Log-in):

  1. Der Benutzer erstellt einen Beitrag: Titel, Medien, Ort (lat, lon)
  2. Benutzer holt eine Liste der Beiträge am nächsten an ihren Geo-Standort (neueste zuerst)

Dies sind die Tabellen, die ich schaffen werde:

Users table 
hash-key=userID from cognito 

Posts table 
hash-key=userID from cognito 
range-key=date 
other-attributes=title, image-s3-path, ge-location 

Was ist der beste Weg, um eine Abfrage zu implementieren (vielleicht mit Hilfe der Zugabe von LSI, GSI oder noch mehr Tabellen), so dass das Ergebnis eine Sammlung von Beiträgen basierend auf dem aktuellen Standort des Benutzers ist. Z.B. Zeige nur Posts innerhalb von 10 km Umkreis, sortiert nach dem neuesten zuerst.

+0

Haben Sie diese Option aktiviert: https://aws.amazon.com/blogs/mobile/geo-library-for-amazon-dynamodb-part-1-table -Struktur/ ? –

Antwort

1

Sie haben erwähnt, dass Ihr Anwendungsfall users can retrieve posts closest to their location ist, so dass ein guter Hash-Schlüssel für Beiträge einer ist, der Daten nach räumlichen Koordinaten und nicht nach Benutzer-ID partitioniert.

Ich würde in Geo Hashing und Verwendung von etwas so für Schlüssel suchen. Sie möchten einen Partitionsschlüssel auswählen, der eine gute räumliche Partitionierung bietet, so dass die Posts gleichmäßig verteilt sind und es relativ wenige von ihnen in jedem Partitionsschlüssel gibt.

+0

Danke für den Tipp. Angenommen, ich kann einen Weg finden, {lat, lon} -> geo-hashed-key zu konvertieren, und ich werde dies als Hash-Schlüssel meiner DynamoDB-Tabelle verwenden. Ich kann den aktuellen Standort des Benutzers an das Back-End senden und dann das relevante Element in der Tabelle durchsuchen. Das Ergebnis sollte eine Liste von Gegenständen sein, geordnet nach dem nächsten bis zum entferntesten. Gibt es einen Weg, dies zu erreichen? – Alex

+0

Sie sollten also einen breiteren, gröberen Bereich als Hash-Schlüssel verwenden. Und platziere alle Gegenstände mit Orten in diesem Bereich als Gegenstände mit diesem geheimen Schlüssel und einem Reichweitenschlüssel des genauen Ortes in der Tabelle. Wenn Sie abfragen, um Posts in der Nähe zu bestimmen, führen Sie einige Abfragen für den "gleichen Bereich" und die Nachbarn aus. Betrachten Sie es als überlappende Zellen oder willkürlichen Radius. –

+0

Dies bedeutet, dass ich eine Art Backend-API (vielleicht von Lambda angetrieben) haben muss, um dieses Ergebnis zu erreichen. dh. Zusammenführen der Ergebnisse mehrerer Abfragen, Sortieren dieser und Erstellen einer Antwort für die Client-App Gibt es weitere AWS-Dienste, die ich zur besseren Implementierung prüfen sollte? – Alex

Verwandte Themen