gpt4 book ai didi

java - DynamoDB 查询两个范围,然后排序

转载 作者:行者123 更新时间:2023-11-30 06:12:18 26 4
gpt4 key购买 nike

假设我有一个专辑表,其中分区键是作者,排序键是专辑。每个项目还具有价格、开始日期和结束日期属性。假设我想查找“author=a”、“album=b”、“startDate < c”、“endDate > d”和“price is between e and f”的所有专辑,并按价格排序。最有效的方法是查询分区键和排序键,然后根据条件c、d、e和f过滤结果,然后按价格排序吗?二级索引可以在这里提供帮助吗? (看来一个二级索引只能用于一两个非键属性的查询,但我的用例需要对多个非键属性进行 < 和 > 操作,然后进行排序)

谢谢!

最佳答案

我正在经历类似的架构设计过程。简而言之,这将取决于您拥有多少属于不同类别的数据,以及您希望针对这些数据运行的确切查询。

The main thing to remember is that you can only ever QUERY based on your Sort Key (where you know the Partition Key) but you ALSO have to maintain uniqueness in order to not overwrite needed data.

在您的案例中可视化这一点的一个好方法如下:

  1. 每位艺术家都是独一无二的(在我看来,艺术家就像一个很好的分区键)
  2. 每个艺术家都可以拥有多个专辑,这使其成为一个很好的排序键(如果您要搜索已知艺术家的专辑)

在上述情况下,您的排序键将与您的分区键结合起来,根据以下答案(值得一读!)创建哈希键,以允许您编写一个查询,其中您知道艺术家,但只知道其中的一部分标题。

即。这里的艺术家 =“Pink Floyd”查询其中字符串专辑包含“Moon”这将与“平克·弗洛伊德”的“月之暗面”相匹配。

话虽这么说,由于分区键和排序键结合起来处理唯一性,因此 Pink Floyd - Dark Side of the Moon 只会有一个“价格”。当您使用第二个价格更新条目时,您将覆盖现有对象。

So the real question is, what are the best Sort Keys for my use case?

要回答这个问题,您需要在构建系统之前知道最常见的查询是什么。

基于价格的查询?

在您的问题中,您提到了价格属性,因为您似乎了解艺术家和专辑。

“author=a”, “album=b”, “startDated” and “price is between e and f”, sorted by price"

对我来说,在这种情况下,您可能不知道艺术家,或者如果您知道,您可能不知道专辑,因为您可能希望编写一个查询,返回来自多个艺术家的专辑或至少返回来自该专辑的多个专辑。同一个艺术家。

但是

如果您创建的数据库包含多个条目(例如来自以不同价格销售同一艺术家/专辑的多个供应商),情况可能并非如此。在这种情况下,我想说最简单的方法是按照给定的价格(排序键)仅存储艺术家专辑(分区键)的一个条目,但您将丢失与艺术家专辑的相同价格匹配的所有其他条目。

多个查询可能需要多个表

我有一个类似的用例,最终需要创建多个表来处理我的查询。数据从一张表传递/处理,并使用插入时触发的 Lambda 吐出到另一张表中。然后,我向一个表发送一些查询,向初始表发送一些其他查询。

关于java - DynamoDB 查询两个范围,然后排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49963410/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com