Допустим, у меня есть таблица с именем "CustomerRequest", и она содержит следующие атрибуты:
- "CustomerId": уникальный идентификатор клиента, может содержать сотни миллионов значений,является последовательностью, сгенерированной старой системой, и ее нельзя изменить.
- "CountryCode": код страны клиента.
- "RequestType": тип запроса, значения из определенного спискас менее чем 100 значениями.
- «RequestDate»: дата запроса.
Вот ограничения:
- Пользователь может заказать запрос к существующему клиенту.
- При заказе запроса пользователю предоставляется идентификатор запроса, чтобы он мог получить запрос позже. Формат должен быть определен, но он не может быть UUID.
- Пользователь также может получить все запросы для идентификатора клиента.
- Пользователь также может получить все запросы для кода страны.
Я ожидаю, что быстро получу сотни миллионов запросов, и главная цель - максимально равномерно распределить рабочую нагрузку.
Что является лучшим выбором для раздела иключ сортировки?
В настоящий момент я могу придумать следующее решение:
- Использовать CustomerId в качестве ключа раздела и RequestDate в качестве ключа сортировки. Идентификатор запроса, предоставленный пользователю, будет выглядеть как «CustomerId-RequestDate» с указанием даты в виде метки времени в миллисекундах (очень маловероятно, что 2 запроса на один и тот же идентификатор клиента будут инициированы одновременно). Я могу использовать этот индекс для получения запроса по его идентификатору И для получения всех запросов для идентификатора клиента.
- Добавить GSI с CountryCode в качестве ключа раздела и идентификатором клиента в качестве ключа сортировки. Я думаю, что я могу использовать этот индекс для получения всех запросов на код страны.
Есть ли лучшее решение?
Спасибо за вашу помощь.