Найти количество объектов внутри таблицы Item of DynomoDB, используя функцию Lamda (Python / Node) - PullRequest
0 голосов
/ 24 февраля 2020

Я новичок в мире AWS, и мне нужно найти количество данных из таблицы DynamoDB. Моя структура таблицы такая.

  1. Имеет 2 элемента (столбцы в MySQL), например, A и B
  2. A - хранит идентификаторы пользователя (первичного ключа раздела).
  3. B - хранит профили пользователей, количество профилей, связанных с идентификатором пользователя.
  4. Предположим, что A содержит идентификатор пользователя 3435 и имеет 3 профиля ({"21btet3", "3sd4", "adf11"}). Мое требование - получить счет 3 на выходе как JSON в формате:

Как установить параметры для сканирования этого запроса? Может кто-нибудь, пожалуйста, помогите?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

вы не должны выполнять полное сканирование таблицы на регулярной основе.

Если вам требуется часто получать этот счет, вы должны подписать лямбда-функцию на Потоки DynamodB и обновлять счет как и когда новые записи вставляются в DynamodB. Это гарантирует, что

  1. вы платите меньше

  2. вам не нужно будет выполнять сканирование таблицы для вычисления этого числа.

0 голосов
/ 24 февраля 2020

DynamoDb - Нет SQL, поэтому существуют некоторые ограничения с точки зрения запроса данных. В вашем случае вы должны отсканировать всю таблицу, как показано ниже

def ScanDynamoData(lastEvalutedKey):
    table =  boto3.resource("dynamodb", "eu-west-1").Table('TableName') #Add your region and table name
    if lastEvalutedKey:
        return table.scan(
            ExclusiveStartKey=lastEvalutedKey
        )
    else:
        return table.scan()

И вызывать этот метод в al oop, пока lastEvalutedKey не станет нулевым (для сканирования всех записей), например

response = ScanDynamoData(None);
totalUserIds = response["Count"] 
#In response you will get the json of entire table you can count userid and profiles here

while "LastEvaluatedKey" in response:
        response = ScanDynamoData(response["LastEvaluatedKey"])
        totalUserIds += response["Count"]
        #Add counts here also
...