Как настроить эффективную схему для данных временного ряда в DynamodB, где всегда получать самую новую переменную - PullRequest
1 голос
/ 15 октября 2019

Во-первых, я новичок в DyanmoDB и хотел бы использовать его для небольшого побочного проекта, чтобы ознакомиться с ним. Я начал читать онлайн-документацию и блоги. Однако некоторые вещи мне пока не до конца понятны.

Вариант использования: я бы хотел сохранить только два (на данный момент) временных ряда в DynamoDB. Одним из них будет уровень инфляции, а другим будет процентная ставка. У меня будет лямбда-функция, которая извлекает эти данные из Интернета на постоянной основе и сохраняет новое значение каждого в DynamoDB. Тогда моя заявка всегда использует последние доступные значения этих тарифов. Частота их получения довольно медленная, не чаще, чем еженедельно.

Для этого я хотел использовать следующую схему (serverless.yml)

 resources: # CloudFormation template syntax from here on.
      Resources:
        usersTable: 
          Type: AWS::DynamoDB::Table
          Properties:
            TableName: RatesTable
            AttributeDefinitions:
              - AttributeName: RateType
                AttributeType: S
              - AttributeName: SourcedOn
                AttributeType: Date
              - AttributeName: Tenor
                AttributeType: S
              - AttributeName: Rate
                AttributeType: N
             KeySchema:
               - AttributeName: RateType
                 KeyType: HASH
               - AttributeName: SourcedOn
                 KeyType: RANGE

Является ли эторазумная схема / настройка на выбор. Что я не уверен, так это то, что использовать для атрибута SourcedOn. Правильно ли введен Date или я должен использовать целое число в формате 20190101 ?. Этот последний вопрос также задним числом об использовании Python для запросов, и я всегда и только заинтересован в чтении последнего полученного значения за RateType

Есть ли способ получить (не зная точно, какая дата)последний источник ставки с бото? Как будет выглядеть такой запрос?

1 Ответ

1 голос
/ 23 октября 2019

Это разумная схема.

Я бы рекомендовал использовать ISO 8601 строку даты или времени для атрибута SourcedOn (например, 2019-10-22 или 2019-10-22T12:35:00Z), потому чтоэто стандартный формат, и потому что, если вы когда-нибудь решите изменить частоту, например, на почасовую, все, что вам нужно сделать, это переключиться с даты на отметки времени, и это не испортит ни одного из ваших запросов. Строки также полезны для дат, потому что действительно просто использовать запрос begins_with, чтобы найти все значения для данного года или месяца. Наконец, уже есть библиотеки, которые могут обрабатывать из даты / времени в строку , поэтому вам не нужно писать код для сериализации даты в целое число или строку.

Чтобы получить самую последнюю дату, выражение KeyConditionExpression вашего запроса должно иметь только значение хеш-ключа. В вашем запросе вы также должны установить ScanIndexForward=false и Limit=1.

...