use*_*677 5 c# amazon-dynamodb
此处使用 .net core api (c#) 和 dynamodb。我的 dbmanager 类为:
public class DbManager<T> : DynamoDBContext, IDynamoDbManager<T> where T : class
{
private DynamoDBOperationConfig _config;
public DbManager(IAmazonDynamoDB client, string tableName) : base(client)
{
_config = new DynamoDBOperationConfig()
{
OverrideTableName = tableName
};
}
public Task<List<T>> GetAsync(IEnumerable<ScanCondition> conditions)
{
return ScanAsync<T>(conditions, _config).GetRemainingAsync();
}
}
public interface IDbManager<T> : IDisposable where T : class
{
Task<List<T>> GetAsync(IEnumerable<ScanCondition> conditions);
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中:
public class ValuesController : Controller
{
private readonly IDbManager<MyData> _dbManager;
public ValuesController(IDbManager<MyData> dbManager)
{
_dbManager = dbManager;
}
[HttpGet()]
[Route("sets/filter")]
public async Task<IActionResult> GetAllData(string id, string name)
{
List<ScanCondition> conditions = new List<ScanCondition>();
conditions.Add(new ScanCondition("Id", ScanOperator.Equal, id));
conditions.Add(new ScanCondition("Name", ScanOperator.Equal, name));
var response = await _dynamoDbManager.GetAsync(conditions);
return Ok(response.ToList());
}
}
Run Code Online (Sandbox Code Playgroud)
我上面的代码工作正常,只是当表中的数据变得太大时,操作变得非常慢。有人告诉我要研究 QueryAsync 方法而不是 ScanAsync,因为 Scan 方法会扫描整个表并且速度很慢。
我查看了 QueryAsync 方法并检查它是否将 hashkey 作为参数之一。
我的问题是如何在上面的代码中使用 QueryAsync 而不是 ScanAsync。我从 UI 调用上述端点,并将不同的参数传递给扫描条件和过滤器。如何将这些条件传递给 QueryAsync 方法。
希望有意见
你不能。Dynamo 查询至少需要您要查询的表或索引的哈希键。您不能查询任意属性。如果您需要支持,您的选择是: