c# - 如何限制 .NET DynamoDB 中 context.Query 的结果数量

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

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

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

这是当前查询:

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

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

所以我尝试了这个:

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

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

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

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

最佳答案

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

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

请记住,DynamoDbContextFromDocumentToDocument 方法仍然很有用,这对于序列化(反)序列化有很大帮助对象往返于客户端请求/响应中找到的属性字典。

关于c# - 如何限制 .NET DynamoDB 中 context.Query 的结果数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63820529/

相关文章:

c# - 获取符合条件且小于 "x"的二进制数的个数

c# - 如何让 JavaScriptSerializer 将子对象视为普通的旧字符串?

c# - 悬停菜单项时更改背景颜色但无法在wpf中显示子菜单

c# - 更改 WCF 引用 URL .Net Core

amazon-web-services - 我真的应该对所有数据使用一个DynamoDB表吗?

c# - 使用 ReactiveUI 绑定(bind) TextBox 并保持货币格式

C# WinForms 隐藏加密 key

c# - 获取最后一个 Task<> 的结果(继续)?

amazon-dynamodb - 如何计算 DynamoDB 的读取容量单位和写入容量单位

amazon-web-services - dynamodb如何仅按排序键查询?