如何将DynamoDB用于基于地理位置的查询?

时间:2017-07-10 20:55:45

标签: amazon-dynamodb geospatial data-modeling nosql

我正在设计照片共享应用(基于位置)。我计划使用AWS Cognito进行身份验证/授权,使用DynamoDB进行持久数据,使用S3进行文件存储,使用Lambda + API Gateway进行Web服务。

这些是关键的用例/访问模式(注册/登录除外):

  1. 用户创建帖子:标题,媒体,位置(lat,lon)
  2. 用户提取最接近其地理位置的帖子列表(最新的第一个)
  3. 这些是我要创建的表格:

    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公里范围内的帖子,按最新排序。

2 个答案:

答案 0 :(得分:2)

你提到你的用例是#chat { height: 300px; width: 100%; border: 1px solid #d9d9d9; background-color: #f8f8f8; text-align: left; padding: 5px; font-size: 13px; display: inline-block; overflow-y: scroll; word-break: break-all; } ,所以说帖子的一个好的哈希键是按空格坐标而不是用户id分区数据的。[/ p>

我会研究geo哈希并使用类似的东西来获得密钥。您希望选择一个分区键,该分区键提供良好的空间分区,使得帖子均匀分布,并且每个分区键中的帖子相对较少。

答案 1 :(得分:1)

我会考虑使用ElasticSearch,因为它natively supports geohashing