我看到DynamoDb官方AWS SDK中的IDynamoDBContext
有不同的方法来查询存储的数据:
Task<T> LoadAsync<T>(object hashKey, object rangeKey, CancellationToken cancellationToken = default (CancellationToken));
AsyncSearch<T> FromQueryAsync<T>(QueryOperationConfig queryConfig, DynamoDBOperationConfig operationConfig = null);
传递给FromQueryAsync((使用的QueryOperationConfig
的QueryFilter
有一个方法,用于添加具有名为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();
}
我希望它们是…尽管我认为DDB SLA只适用于GetItem((
但是Query((的目的是返回不止一条记录。Query((只有在表具有复合主键(hash+sort(时才有用。您可以根据给定的(EQ(哈希键以及排序键上的一些函数(LT、GT、Starts with(查询((。
GetItem((需要完整的主键,并且只能返回1条记录。
我想说的是,你的应用程序应该知道它是否有PK,只需要一条记录,或者你是否只有一个部分密钥,并期望返回一份记录列表。