Dynamo Db SDK for.NET-按键查询数据的首选方式是什么



我看到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((使用的QueryOperationConfigQueryFilter有一个方法,用于添加具有名为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,只需要一条记录,或者你是否只有一个部分密钥,并期望返回一份记录列表。