Я вижу, что IDynamoDBContext
из официального AWS SDK для DynamoDb имеет разные методы запроса сохраненных данных:
Task<T> LoadAsync<T>(object hashKey, object rangeKey, CancellationToken cancellationToken = default (CancellationToken));
AsyncSearch<T> FromQueryAsync<T>(QueryOperationConfig queryConfig, DynamoDBOperationConfig operationConfig = null);
QueryFilter
, переданный в QueryOperationConfig
, используемый FromQueryAsync(), имеет метод для добавления условий запроса с первым параметром с именем keyAttributeName.
public class QueryFilter : Filter
{
public void AddCondition(
string keyAttributeName,
QueryOperator op,
params DynamoDBEntry[] values)
...
Означает ли это, что запрос DynamoDb с FromQueryAsync()
, установленным с правильным типом условия (для ключевых атрибутов), выполняется так же быстро, как запрос данных с помощью вызова первичного ключа LoadAsync(hashKey)
?
Другими словами, вызовы метода A
и метода B
похожи по производительности?
protected Task<T> A<T>(string hashKey)
{
return _dynamoDbContext.LoadAsync<T>(hashKey,
_consistentReadConfig,
CancellationToken.None);
}
protected async Task<T> B<T>(string hashKey)
{
var queryFilter = new QueryFilter();
queryFilter.AddCondition("HashKeyProperty", QueryOperator.Equal, hashKey); // adding condition for hash key equality
var queryOperationConfig = new QueryOperationConfig
{
Filter = queryFilter
};
var queryOperation = _dynamoDbContext.FromQueryAsync<T>(
queryOperationConfig,
_consistentReadConfig);
var results = await queryOperation.GetNextSetAsync();
return results.SingleOrDefault();
}
Я ожидаю, что они будут... хотя я считаю, что DDB SLA применяется только к GetItem()
Но смысл Query() состоит в том, чтобы возвращать больше, чем одну запись. Query() полезен только в том случае, если ваша таблица имеет составной первичный ключ (хеш + сортировка). Вы запрашиваете () на основе заданного (EQ) хеш-ключа и, возможно, некоторой функции (LT, GT, Starts with) ключа сортировки.
GetItem() требует полный первичный ключ и может вернуть только 1 запись.
Я пытаюсь подчеркнуть, что ваше приложение должно знать, есть ли у него PK и нужна ли только одна запись, или у вас просто есть частичный ключ и вы ожидаете список записей обратно.