DynamoDb запрашивает геопространственные данные (локальный вторичный индекс) И внешние ключи сохраняются в качестве ключа диапазона - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь создать таблицу DynamoDb, поддерживающую эти 3 шаблона доступа:

  1. Список доступа учреждений в радиусе XX от указанного почтового индекса.
  2. Список доступа учрежденийв радиусе XX от указанного почтового индекса для данного уровня образования (4 года, 2 года, старшая школа и т. д.).
  3. Доступ к списку учреждений в радиусе XX от указанного почтового индекса для данной работыкод и уровень образования.

Ключ раздела генерируется как часть Geo Library для DynamoDb ( AWS Geo Library) . Таким образом, в основном, я группирую учреждения по географическому местоположению, поддерживая возможность поиска учреждений в радиусе XX от предоставленного почтового индекса (с использованием широты / долготы почтового индекса).

Ниже приведен мой шаблон CloudFormation для моегоТаблица DynamoDb:

    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 представляет уровень образования (4-летнее учебное заведение).
  • 11-1011.00 представляет код задания

Значение Hashkey 966762 - это первые 6 цифр из значения GeoHash. Это позволяет мне группировать учреждения по близости. Это позволяет мне искать учреждения в радиусе. У меня есть локальный вторичный индекс (LSI) с использованием Hashkey и GeoHash. Мой запрос использует LSI для поиска учреждений в радиусе.

Я также хочу иметь возможность дополнительно фильтровать учреждения в радиусе с помощью следующих схем доступа:

  • уровень образования . Пример: 2 _ *
  • код работы и уровень образования . Пример: 11-1011.00_2 _ *

Я наткнулся на стену, где DynamoDb позволяет выполнять запросы только на основе двух ключевых условий. Для выполнения гео-запросов (в радиусе) я должен использовать хеш-ключ и LSI (используя геохэш). Я не могу продолжать фильтрацию, используя мой ключ диапазона, который моделирует отношения, которые есть у учреждения с уровнем образования и кодами работы.

Как использовать DynamoDb для фильтрации по радиусу И , используя связанныеданные, такие как уровень образования и / или код работы?

...