gpt4 book ai didi

c# - AWS DynamoDB 使用 QueryAsync 而不是 ScanAsync

转载 作者:行者123 更新时间:2023-12-04 15:50:09 24 4
gpt4 key购买 nike

在这里使用 .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);
}

在我的 Controller 中:
  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,因为 Scan 方法扫描整个表并且速度很慢。

我查看了 QueryAsync 方法并检查它是否将 hashkey 作为参数之一。

我的问题是如何在上面的代码中使用 QueryAsync 而不是 ScanAsync。我正在从我的 UI 调用上述端点,它将不同的参数传递给那里的 scanconditions 和过滤器。
如何将这些条件传递给 QueryAsync 方法。

将不胜感激投入

最佳答案

你不能。 Dynamo 查询至少需要您要查询的表或索引的哈希键。您不能查询任意属性。如果您需要支持您的选择是:

  • 使用 Dynamo 扫描并接受性能和金钱成本可能低于可接受的水平
  • 使用 Dynamo 作为记录数据库,但将数据复制到 AWS ElasticSearch 之类的东西中以启用随机查询
  • 抛弃 Dynamo,只使用常规的关系数据库。 RDS 支持多种不同的数据库类型
  • 对您需要执行的常见查询进行分析,并在 Dynamo 中对您的数据进行适当建模。这可能需要向表中添加额外的索引并使用不同的键多次复制数据以支持不同的查询类型。
  • 关于c# - AWS DynamoDB 使用 QueryAsync 而不是 ScanAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54149005/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com