2017-07-10 20 views
0

私は写真共有アプリ(位置情報ベース)をデザインしています。私はAWS Cognitoを認証/承認、永続データ用のDynamoDB、ファイルストレージ用のS3、Webサービス用のLambda + API Gatewayを使用する予定です。ジオロケーションベースのクエリにDynamoDBを使用するにはどうすればよいですか?

これらはキーユースケース/アクセスパターン(サインアップ以外/サインイン)である:

  1. ユーザがポストを作成しますタイトル、メディア、位置(緯度、経度)
  2. ユーザーは、地理的位置に最も近い記事の一覧を取得する(新しい順)

これらは私が作成するつもりの表のとおりです。

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 

クエリを実装する最良の方法は(おそらく、LSI、GSI、またはさらに多くのテーブルを追加することによって)結果がユーザーの現在の場所に基づく投稿の集まりになるようにすることです。例えば。最新の順にソートされた、半径10 km以内の投稿のみを表示します。

+0

は、あなたがこれを確認しておりますので、私は、ElasticSearchを使用することを検討します:https://aws.amazon.com/blogs/mobile/geo-library-for-amazon-dynamodb-part-1-table構造/? –

答えて

1

あなたのユースケースはusers can retrieve posts closest to their locationだから、投稿用の良いハッシュキーはユーザーIDではなく空間座標でデータを分割するものだと述べました。

ジオハッシュを調べ、キーのようなものを使用します。ポストが一様に分散され、各パーティションキーに比較的少ない数のパーティションが存在するような良好な空間パーティションを与えるパーティションキーを選択したいとします。

+0

チップをありがとう。 {lat、lon} - > geo-hashed-keyを変換する方法を考え出すと、これを私のDynamoDBテーブルのハッシュ・キーとして使用します。ユーザーの現在の場所をバックエンドに送信してから、テーブル内の関連するアイテムを検索できます。結果は最も近いものから最も遠いものの順に並べられた項目のリストであると考えられます。これを達成する方法はありますか? – Alex

+0

ハッシュキーとして、より広い、より粗い領域を使用したいと思うでしょう。そのエリアには、そのハッシュキーとテーブル内の正確な位置の範囲キーを持つアイテムとして、すべてのアイテムを配置します。近くにある投稿を特定するためにクエリを実行すると、「同じ領域」とその近傍のクエリが実行されます。オーバーラップするセルや任意の半径と考えることができます。 –

+0

これは、この結果を達成するために何らかのバックエンドAPI(おそらくラムダによって動かされる)を必要とすることを意味します。すなわち、複数のクエリの結果をマージし、ソートしてクライアントアプリケーションのレスポンスを作成します。より良い実装のために調べなければならない他のAWSサービスはありますか? – Alex