使用地理空间数据(本地二级索引)和外键另存为范围键的DynamoDb查询

时间:2019-10-17 15:10:40

标签: amazon-dynamodb dynamodb-queries amazon-dynamodb-index

我正在尝试构建一个支持以下3种访问模式的DynamoDb表:

  1. 访问给定邮政编码XX半径内的机构列表。
  2. 访问给定教育水平(4年,2年,高中等)的特定邮政编码的XX半径范围内的机构的列表。
  3. 在给定邮政编码和特定教育级别的XX半径范围内访问机构的列表。

分区密钥是作为DynamoDb(AWS Geo Library)的地理库的一部分生成的。因此,基本上,我通过地理位置将机构分组在一起,从而支持在提供的zip的XX半径内搜索机构的功能。代码(使用邮政编码的经/纬度)。

以下是我的DynamoDb表的CloudFormation模板:

    dynamoDbInstitutions:
    Type: AWS::DynamoDB::Table
    Properties:
        TableName: institutions
        AttributeDefinitions:
            - AttributeName: hashKey
              AttributeType: N
            - AttributeName: rangeKey
              AttributeType: S
            - AttributeName: geohash
              AttributeType: N
        KeySchema:
            - AttributeName: hashKey
              KeyType: HASH
            - AttributeName: rangeKey
              KeyType: RANGE
        ProvisionedThroughput: 
            ReadCapacityUnits: 50
            WriteCapacityUnits: 2
        LocalSecondaryIndexes:
        - IndexName: geohash-index
          KeySchema:
          - AttributeName: hashKey
            KeyType: HASH
          - AttributeName: geohash
            KeyType: RANGE
          Projection:
            ProjectionType: ALL

这是我表中数据的一个示例:

enter image description here

  • 176008 代表一个机构。
  • 2 代表教育水平(四年制)。
  • 11-1011.00 代表工作代码

哈希键值966762是GeoHash值的前6位数字。这使我可以按距离将机构分组。这使我可以搜索半径范围内的机构。我有一个使用Hashkey和GeoHash的本地二级索引(LSI)。我的查询是使用LSI查找半径范围内的机构。

我还希望能够通过以下访问模式进一步过滤半径范围内的机构:

  • 教育水平。示例:2 _ *
  • 职务代码和学历。例如:11-1011.00_2 _ *

我碰到了一堵墙,DynamoDb仅允许基于2个关键条件进行查询。为了进行地理查询(在半径范围内),我必须使用哈希键和LSI(使用geohash)。我无法使用我的范围键来进一步过滤,该范围键用于建立机构与教育水平和职务代码之间的关系模型。

我如何使用DynamoDb按半径过滤 AND 并使用相关数据(例如教育水平和/或工作代码)进行过滤?

0 个答案:

没有答案