【问题标题】:Ensuring Dynamo retrieves *exactly* n results, given a filter expression在给定过滤器表达式的情况下,确保 Dynamo 检索 *exactly* n 个结果
【发布时间】:2015-09-21 18:09:09
【问题描述】:

在 DynamoDB 中是否有办法保证 n 结果将是准确的
如果我指定一个限制一个过滤器返回?

我看到的问题是文档状态:

在响应中,DynamoDB 返回 限值的范围。例如,如果您发出查询或扫描 限制值为 6 且没有过滤器表达式的请求, DynamoDB 返回表中与 请求中指定的关键条件(或仅前六项 在没有过滤器的扫描的情况下)。如果您还提供 FilterExpression 值,DynamoDB 将返回第一个中的项目 六个也符合过滤器要求(结果数 返回将小于或等于 6)。

所以这意味着将检索 6 个项目,然后应用过滤器。我怎样才能继续搜索,直到我得到正好“6”个项目? (理想情况下,查询中有一些设置可以继续进行,直到达到限制 - 或达到耗尽)

例如,假设我查询 50 个人,他们的名字是“john”,Dynamo 将返回 50 个人,然后应用“john”过滤器。现在只返回了3个人。 有没有办法可以确保它会继续搜索,直到满足 50 的限制?

我不想使用Scan,因为Scan 总是 会搜索表中的每个项目(无论限制如何——如果我在这方面错了,请纠正我)。

我怎样才能使查询的过滤器懒惰直到满足限制?如何继续搜索直到满足限制?

【问题讨论】:

  • 真挖你的头像

标签: amazon-web-services amazon-dynamodb


【解决方案1】:

如果您可以在查询本身中进行过滤,那将是最好的,因为您不必使用过滤表达式。但如果你不能,我怀疑发电机的工作方式意味着过滤器只是对结果的扫描——基本上是一种节省带宽的方法,仅此而已。您仍然可以使用分页来获得更多结果;如果您使用的是 Dynamo,您可能会关心查询的速率,因此控制您实际执行的查询数量(及其大小)是一件好事。

【讨论】:

  • 似乎在查询期间进行过滤的唯一方法是使用KeyConditionExpression,顾名思义,它仅适用于键(哈希或范围)。所以在我的情况下(跳过带有deleted = true 属性的项目)这将不适用。对吗?
  • 该表有一个类型为string (uuid) 的主索引和一个integer 的二级索引:/ 这是非常不幸的
  • 是的,我很想被证明是错误的,但我不相信我可以在查询中合并来自不同索引的键。我执行的查询仅在包含 uuidseqn 键的索引上。有没有办法从另一个索引中间查询(在不同的索引上)查找值?
猜你喜欢
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 1970-01-01
  • 2022-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多