适用于 .NET 的 Dynamodb SDK - 按键查询数据的最佳方式是什么?
Dynamo Db SDK for .NET - what is the preferable way to query data by key?
我看到官方 AWS SDK for DynamoDb 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)
...
这是否意味着查询 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() 的意义在于 return 不止一条记录。 Query() 仅在您的 table 具有复合主键(散列+排序)时才有用。您根据给定的 (EQ) 哈希键和排序键上可能的某些函数(LT、GT、开头为)查询()。
GetItem()需要全主键,只能return1条记录。
我想说的是,您的应用程序应该知道它是否具有 PK 并且只需要一条记录,或者您是否只有部分密钥并期望返回记录列表。
我看到官方 AWS SDK for DynamoDb 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)
...
这是否意味着查询 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() 的意义在于 return 不止一条记录。 Query() 仅在您的 table 具有复合主键(散列+排序)时才有用。您根据给定的 (EQ) 哈希键和排序键上可能的某些函数(LT、GT、开头为)查询()。
GetItem()需要全主键,只能return1条记录。
我想说的是,您的应用程序应该知道它是否具有 PK 并且只需要一条记录,或者您是否只有部分密钥并期望返回记录列表。