DynamoDB не является реляционной базой данных! Вы запрашиваете довольно сложный запрос к вашей схеме.
Вам нужна схема, оптимизированная для запросов временных рядов, например, "получить 10 самых последних элементов в таблице". Такая схема должна предлагать компромисс между горизонтальным масштабированием (то, что «Динамо» предлагает прямо из коробки) и локальностью данных, чтобы собрать ваш ответ.
Один из вариантов - разделить ваши данные по дате. Например, используйте дату в качестве ключа раздела и отметку времени в качестве ключа сортировки. Затем, если вы получите достаточно данных, чтобы ответить на ваш запрос, вам нужно будет взглянуть только сегодня и, возможно, днем ранее.
Конечно, все становится сложнее, если вы не всегда получаете достаточно данных каждый день, и в этом случае выяснить, что является самой последней датой, сложнее. Вы можете изменить гранулярность ключа раздела на неделю / месяц.
Вы также можете использовать схему другого рода, где вы храните «последние» данные в одном разделе и выворачиваете старые данные.
Но вот еще одна мысль: вы могли бы создать две таблицы - одну, в которой хранятся все элементы, и одну, в которой хранятся только самые последние. Вы можете использовать TTL в «самой последней таблице» и удалять записи старше определенного порога, а в этой таблице вы можете настроить схему так, чтобы все элементы попадали в один и тот же раздел (т. Е. Они имели одинаковое значение для PK) и затем используйте метку времени в качестве ключа сортировки. Тогда получение последней десятки станет простым запросом.
Или вы можете использовать реляционную базу данных вместе с DynamoDB для аналитических запросов.
Дополнительная литература: Рекомендации по работе с базами данных временных рядов на DynamoDB