【问题标题】:How do I limit the number of results from context.Query in DynamoDB in .NET如何限制 .NET 中 DynamoDB 中 context.Query 的结果数量
【发布时间】:2020-09-10 13:22:32
【问题描述】:

我正在尝试限制 DynamoDB 在查询表时返回的项目数。我只需要第一个匹配结果。

目标是减少所消耗的读取单元的数量,并努力保持代码的可读性,我使用context.Query 来查询二级本地索引并获得第一个匹配结果。

这是当前查询:

context.Query<TableEntry>(matchId, new DynamoDBOperationConfig { IndexName = "SecondaryId-index" })

这将返回所有 SecondaryId-index 匹配 matchId 的项目,但我只想要它匹配的第一个项目。

所以我尝试了这个:

context.Query<TableEntry>(matchId, new DynamoDBOperationConfig { IndexName = "SecondaryId-index" }).First()

据我了解context.Query(即使它很懒惰)仍将执行整个查询并至少读取第一页(使用.First() 枚举时),并且该页面将包含多个项目,因此会消耗更多的读取容量单位超出要求。

我找不到任何有关如何在 .NET 中仅使用 context.Query 将查询限制为第一个匹配项的文档。

这可能吗?如果不是,在保持代码最小/干净的同时,下一个最佳选择是什么?

【问题讨论】:

  • 如果我发现是正确的,使用context.Query - benfoster.io/blog/…时没有办法限制返回的对象数量
  • 我无法回答您的问题,但我怀疑您的假设。 FIRST_VALUE() 是一个 SQL 函数。我希望 Microsoft 将其添加为您的查询的一部分,而不是将结果从您的数据库返回到 C# 空间。我并不是说我“知道”它会这样做,只是说它是可能的,而且 Query 通常对这些事情非常聪明。

标签: c# .net amazon-dynamodb limit dynamodb-queries


【解决方案1】:

不,这是不可能的。数据模型模式很笨:它提供了一个方便的接口来执行常见的操作,而无需编写任何样板,但以性能和控制为代价。

您需要使用低级别的DynamoDbClient。对于需要控制其请求的应用程序,您可能希望删除 DynamoDbContext,而是在客户端周围创建自己的包装器,以公开您需要的任何请求属性。

请记住,DynamoDbContext 对其FromDocumentToDocument 方法仍然有用,这对于将对象序列化到/从客户端请求/响应中找到的属性字典(反序列化)方面提供了巨大帮助。

【讨论】:

  • 您是否有机会与 DynamoDbClient 分享使用最少代码运行此查询的最佳方法?
  • 在相关说明中,您知道DynamoDbContext 是否允许强一致性读取?
猜你喜欢
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
相关资源
最近更新 更多