适用于 .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 并且只需要一条记录,或者您是否只有部分密钥并期望返回记录列表。