问题描述
我试图限制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
将查询限制为FirsT匹配项的文档。
那有可能吗?如果没有,那么在保持代码最少/干净的情况下,下一个最佳选择是什么?
解决方法
否,这是不可能的。数据模型模式非常笨拙:它提供了方便的界面来执行常见操作,而无需编写任何样板文件,但会降低性能和控制力。
您将需要使用低级DynamoDbClient。对于需要控制其请求的应用程序,您可能需要删除DynamoDbContext
,而是在客户端周围创建自己的包装程序,以公开所需的任何请求属性。
请记住,DynamoDbContext
仍可用于其FromDocument
和ToDocument
方法,这在将对象与序列中的属性字典(反序列化)(反序列化)方面有巨大的帮助。客户的请求/响应。