Объединенный ключ DynamoDB, содержащий временную метку

#c# #timestamp #amazon-dynamodb

#c# #временная метка #amazon-dynamodb

Вопрос:

У меня есть таблица DynamoDB со следующей ключевой структурой,

 Hash     Range
string   string|string|timestamp(string)
12345    ABC|DEF|123456789
  

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

вот моя реализация:

 var asyncSearch = _dynamoDbContext.QueryAsync<PricingModel>(entityKeyId,
                    new DynamoDBOperationConfig
                    {
                        OverrideTableName = _config.Value.PricingModelTableNameOverride,
                        QueryFilter = new List<ScanCondition>
                        {
                            new ScanCondition(nameof(PricingModel.EntityKeyId),
                                ScanOperator.Equal,
                                entityKeyId),
                            new ScanCondition(nameof(PricingModel.SortKeyId),
                                ScanOperator.LessThanOrEqual,
                                sortKeyId)
                        }
                    });
  

Ответ №1:

Здесь очень мало информации (например, каковы другие компоненты ключа диапазона и для чего вы будете их использовать). Однако, похоже, вам нужно переместить позицию временной метки в начало ключа диапазона.

DynamoDB упорядочит элементы в ключе раздела по ключу диапазона. Если вы хотите, чтобы они были упорядочены по дате, вам понадобится временная метка в качестве первой части ключа диапазона.

Поскольку ваш ключ диапазона представляет собой строку, убедитесь, что вы выбрали формат даты, который естественным образом сортируется в виде строки.

РЕДАКТИРОВАТЬ: строки ISO 8601 (например, 2019-04-11T11:37:00Z) естественным образом сортируются как строка, а также читаются человеком.

РЕДАКТИРОВАТЬ: затем вы можете использовать оператор условия ключа LT для меньше, чем и BEGINS_WITH для точной временной метки