我试图限制 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()
枚举时)并且页面将包含超过 1 个项目,因此消耗的读取容量单位多于所需的容量单位。
我找不到任何有关如何仅使用 .NET 中的 context.Query
将查询限制为第一个匹配项的文档。
这可能吗?如果不是,那么在保持代码最少/干净的同时,下一个最佳选择是什么?
最佳答案
不,这是不可能的。数据模型模式非常愚蠢:它提供了一个方便的接口(interface)来执行常见操作,而无需编写任何样板,但代价是性能和控制。
您需要使用低级 DynamoDbClient 。对于需要控制其请求的应用程序,您可能希望删除 DynamoDbContext
,而是在客户端周围创建您自己的包装器,以公开您需要的任何请求属性。
请记住,DynamoDbContext
的 FromDocument
和 ToDocument
方法仍然很有用,这对于序列化(反)序列化有很大帮助对象往返于客户端请求/响应中找到的属性字典。
关于c# - 如何限制 .NET DynamoDB 中 context.Query 的结果数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63820529/