вы можете сделать следующее:
(1) Каждый элемент будет иметь фиксированный ключ раздела (то есть значение ключа раздела для всех элементов. Точное значение не имеет значения, если оното же самое для всех предметов, поэтому давайте предположим, что это просто строка "foo"
).
(2) Ключ сортировки будет чем-то случайным, например, случайно сгенерированное 32-битное целое число.
(3) строка из 64 символов из 5 символов будет сохранена в третьем атрибуте(который не является ни разделом, ни ключом сортировки)
, если вы хотите получить 1000 случайных элементов, вам нужно выдать DynamoDB query
для ключа раздела = "foo"
. Элементы, возвращаемые из запроса, сортируются по ключу сортировки. Так как вы выбрали случайный ключ сортировки (см. (2) выше), вы получите 1000 случайных предметов.
соображения сортировки ключа
набор из всех 5 символов base 64 - это пробел размером 2^30
. Таким образом, ваш ключ сортировки должен быть достаточно большим, чтобы хранить 2 ^ 30 элементов. Таким образом, прагматичного выбора случайного 32-битного целого будет достаточно. Однако, если вам нужно убедиться, что выбор из 1000 элементов действительно действительно случайный, вы можете выбрать что-то, чья случайность лучше случайной функции вашей среды выполнения. Например, вы можете вычислить sha-384
для значения base 64, которое вы сохраните, и использовать его в качестве значения ключа сортировки. Максимальная длина ключа сортировки составляет 1024 байта , поэтому 384 бита находятся в допустимых пределах.
В частности, не используйте UUID в качестве ключа сортировки. UUID, как правило, не так случайны.