Использование .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);
}
И в моем контроллере:
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());
}
}
Мой приведенный выше код работает нормально, просто когда данные в таблице становятся слишком большими, операция становится очень медленной. Кто-то сказал мне, чтобы он использовал метод QueryAsync вместо ScanAsync, поскольку метод сканирования сканирует всю таблицу и работает медленно.
Я посмотрел на метод QueryAsync и проверил, что он принимает hashkey в качестве одного из параметров.
Мой вопрос: как я могу использовать QueryAsync вместо ScanAsync с моим кодом выше? Я вызываю вышеуказанную конечную точку из своего пользовательского интерфейса, и она передает различные параметры в условия сканирования и фильтры там.
Как я могу передать эти условия в метод QueryAsync.
Буду признателен за вводимые данные