#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 для точной временной метки