Amazon dynamodb 使用动态值对DynamoDB中的项目进行排序?
我在一张桌子里有成千上万的东西。每个项目都有一个数值属性Amazon dynamodb 使用动态值对DynamoDB中的项目进行排序?,amazon-dynamodb,dynamodb-queries,amazon-dynamodb-data-modeling,Amazon Dynamodb,Dynamodb Queries,Amazon Dynamodb Data Modeling,我在一张桌子里有成千上万的东西。每个项目都有一个数值属性分数。我想做的是: 给定一些targetScore,选择所有项目,其中targetScore-n您实际上不需要步骤1来获得步骤2。我假设score是设置中的排序键 在第2步中,您需要按abs(targetScore-score)对项目进行排序,并取j最低的项目 虽然DynamoDB没有任何直接的方法来实现这一点,但是绝对值的定义使得它非常容易实现。首先,请注意“abs(targetScore-score)”的定义如下:它是: targetS
分数
。我想做的是:
targetScore
,选择所有项目,其中targetScore-n您实际上不需要步骤1来获得步骤2。我假设score
是设置中的排序键
在第2步中,您需要按abs(targetScore-score)
对项目进行排序,并取j
最低的项目
虽然DynamoDB没有任何直接的方法来实现这一点,但是绝对值的定义使得它非常容易实现。首先,请注意“abs(targetScore-score)”的定义如下:它是:
targetScore-如果score=targetScore,则得分
因此,abs最小的项目是得分高于targetScore但尽可能低的项目,或者得分低于targetScore但尽可能高的项目
因此,您可以执行两个独立的DynamoDB查询:
查询第一个j
项目score>=targetScore
,按递增分数排序
查询具有分数
的第一个j
项目,按递减分数排序
DynanoDB可以高效且廉价地为您执行这两项查询—它包括一个带有KeyConditions
参数和Limit
的查询
,以及ScanIndexForward
进行递减排序。但是没有昂贵且低效的过滤器表达式
一旦您拥有了每种类型1和类型2的j
最小项,剩下的就是从我们得到的2*j
项中选择总体j
最小项。没有主键,我如何进行查询
?另外,score
在我的例子中不是一个排序键,只是一个任意属性。如果score不是一个排序键,你可以用filtereexpression执行我说的操作,但要为读取整个数据库付费。。。你需要它作为廉价请求的排序键…明白了。谢谢关于查询
,尽管如此。我不需要指定一个特定的分区键以便查询
?我想做的是获取所有可能的项目(跨多个分区),其中分数在一个范围内。好吧,你有Scan
,但这将更加昂贵-它基本上读取整个数据库!我不知道这是否真的是你想要的…正是我的问题。我目前正在做一个扫描
,因为我想不出一个切实可行的方法来实现我想要的。我是否应该有一个二级索引,其中所有内容都具有相同的分区键,以便我可以执行您建议的两个查询?