0

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();
        }

4

1 回答 1

1

我希望他们是......虽然我相信 DDB SLA 仅适用于 GetItem()

但是 Query() 的目的是返回多于一条记录。Query() 仅在您的表具有复合主键(散列+排序)时才有用。您 query() 基于给定的(EQ)哈希键和排序键上可能的某些函数(LT、GT、Starts with)。

GetItem() 需要完整的主键,并且只能返回 1 条记录。

我要说明的一点是,您的应用程序应该知道它是否具有 PK 并且只需要一条记录,或者您是否只有部分密钥并期望返回记录列表。

于 2020-12-14T20:43:11.847 回答