如何在 .NET 的 DynamoDB 中限制来自 context.Query 的结果数量
How do I limit the number of results from context.Query in DynamoDB in .NET
我正在尝试限制 return 在查询 table 时由 DynamoDB 编辑的项目数。我只需要第一个匹配结果。
目标是减少消耗的读取单元数,并努力保持代码的可读性我正在使用 context.Query
查询二级本地索引并获得第一个匹配结果。
这是当前查询:
context.Query<TableEntry>(matchId, new DynamoDBOperationConfig { IndexName = "SecondaryId-index" })
这将 return 所有 SecondaryId-index
匹配 matchId
的项目,但我只想要它匹配的第一个项目。
所以我尝试了这个:
context.Query<TableEntry>(matchId, new DynamoDBOperationConfig { IndexName = "SecondaryId-index" }).First()
据我所知,context.Query
(即使它是懒惰的)仍将执行整个查询并至少读取第一页(使用 .First()
进行枚举时)并且该页面将包含多个项目,因此消耗了比所需更多的读取容量单位。
我找不到任何关于如何在 .NET 中仅使用 context.Query
将查询限制为第一个匹配项的文档。
这可能吗?如果没有,下一个最好的选择是什么同时保持代码 minimal/clean?
不,这不可能。数据模型模式非常愚蠢:它提供了一个方便的接口来执行常见操作,而无需编写任何样板,但以性能和控制为代价。
您需要使用 low-level DynamoDbClient。对于需要控制其请求的应用程序,您可能希望删除 DynamoDbContext
,而是围绕客户端创建自己的包装器,以公开您需要的任何请求属性。
请记住,DynamoDbContext
的 FromDocument
和 ToDocument
方法仍然有用,这对(反)序列化对象有很大帮助 to/from在客户端 request/responses.
中找到的属性字典
我正在尝试限制 return 在查询 table 时由 DynamoDB 编辑的项目数。我只需要第一个匹配结果。
目标是减少消耗的读取单元数,并努力保持代码的可读性我正在使用 context.Query
查询二级本地索引并获得第一个匹配结果。
这是当前查询:
context.Query<TableEntry>(matchId, new DynamoDBOperationConfig { IndexName = "SecondaryId-index" })
这将 return 所有 SecondaryId-index
匹配 matchId
的项目,但我只想要它匹配的第一个项目。
所以我尝试了这个:
context.Query<TableEntry>(matchId, new DynamoDBOperationConfig { IndexName = "SecondaryId-index" }).First()
据我所知,context.Query
(即使它是懒惰的)仍将执行整个查询并至少读取第一页(使用 .First()
进行枚举时)并且该页面将包含多个项目,因此消耗了比所需更多的读取容量单位。
我找不到任何关于如何在 .NET 中仅使用 context.Query
将查询限制为第一个匹配项的文档。
这可能吗?如果没有,下一个最好的选择是什么同时保持代码 minimal/clean?
不,这不可能。数据模型模式非常愚蠢:它提供了一个方便的接口来执行常见操作,而无需编写任何样板,但以性能和控制为代价。
您需要使用 low-level DynamoDbClient。对于需要控制其请求的应用程序,您可能希望删除 DynamoDbContext
,而是围绕客户端创建自己的包装器,以公开您需要的任何请求属性。
请记住,DynamoDbContext
的 FromDocument
和 ToDocument
方法仍然有用,这对(反)序列化对象有很大帮助 to/from在客户端 request/responses.