我IDynamoDBContext
从官方 AWS SDK for DynamoDb 看到有不同的方法来查询存储的数据:
Task<T> LoadAsync<T>(object hashKey, object rangeKey, CancellationToken cancellationToken = default (CancellationToken));
AsyncSearch<T> FromQueryAsync<T>(QueryOperationConfig queryConfig, DynamoDBOperationConfig operationConfig = null);
QueryFilter
传递给FromQueryAsync()QueryOperationConfig
使用的方法有一个方法,用于使用名为keyAttributeName的第一个参数添加查询条件。
public class QueryFilter : Filter
{
public void AddCondition(
string keyAttributeName,
QueryOperator op,
params DynamoDBEntry[] values)
...
这是否意味着FromQueryAsync()
使用正确类型的条件(对于键属性)查询 DynamoDb 的执行速度与通过主键调用查询数据的速度一样快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();
}