DynamoDb сцепленный ключ, который включает временную метку - PullRequest
1 голос
/ 11 апреля 2019

У меня есть таблица 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 Ответ

1 голос
/ 11 апреля 2019

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

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

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

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

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

...