Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何在使用dynamodb排序后获得位置/排名?_Python_Nosql_Amazon Dynamodb - Fatal编程技术网

Python:如何在使用dynamodb排序后获得位置/排名?

Python:如何在使用dynamodb排序后获得位置/排名?,python,nosql,amazon-dynamodb,Python,Nosql,Amazon Dynamodb,我目前正在尝试使用python中的扩展来获取索引的降序查询中的position\rank,下面是我想到的: router.get('/'+USER_ROUTE+'/top', (req, res) => { POST.query() .usingIndex('likecount') .attributes(['id', 'likecount']) .descending() .loadAll() .exec((error, result) =

我目前正在尝试使用python中的扩展来获取索引的降序查询中的position\rank,下面是我想到的:

router.get('/'+USER_ROUTE+'/top', (req, res) => {
    POST.query()
    .usingIndex('likecount')
    .attributes(['id', 'likecount'])
    .descending()
    .loadAll()
    .exec((error, result) => {
        if (error) {
            res.status(400).json({ error: 'Error retrieving most liked post' });
        }

        //convert res to dict and sort dict by value (likecount)

        res.json({position:Object.keys(result).indexOf(req.body.id)});
    });
});
如您所见,我会将结果转换为ID和likecount的dict,然后对dict进行排序,然后得到我要查找的键的索引。 显然,这会在多个方面失败,速度慢/效率低(每次调用都会迭代数据库中的每个项),并且需要多个步骤

有没有更简洁的方法来实现这一点?
谢谢。

没有比这更好的方法了。DynamoDB不适合用于需要复杂查询功能的场景


此外,单个查询操作对其可以读取的文档数量有严格限制;即使它确实支持这种查询,它也不适用于文档数量超过一次读取所能处理数量的情况。

没有更好的方法可以做到这一点。DynamoDB不适合用于需要复杂查询功能的场景


此外,单个查询操作对其可以读取的文档数量有严格限制;即使它确实支持这种查询,它也不适用于文档数量超过一次读取所能处理数量的情况。

DynamoDB不是为排行榜设计的。为此,您应该选择另一个DB。我建议您在您的案例中使用“DynamoDB”和“Redis”。您可以参考本文档了解Redis排行榜:

工作流程:

  • Setup Dynamo Stream=>Lambda函数的触发器事件=>Lambda函数将计算“喜欢的计数”并插入到Redis(例如:hash是“id”,score是“喜欢的计数”)
  • 当客户端触摸影响“喜欢的计数”=>在DynamoDB=>中插入/更新记录的操作时,Redis将立即更新“喜欢的计数”,因为Dynamo流
  • 客户端查询排行榜=>API将从“Redis”查询并返回到客户端

  • DynamoDB不是为排行榜设计的。为此,您应该选择另一个DB。我建议您在您的案例中使用“DynamoDB”和“Redis”。您可以参考本文档了解Redis排行榜:

    工作流程:

  • Setup Dynamo Stream=>Lambda函数的触发器事件=>Lambda函数将计算“喜欢的计数”并插入到Redis(例如:hash是“id”,score是“喜欢的计数”)
  • 当客户端触摸影响“喜欢的计数”=>在DynamoDB=>中插入/更新记录的操作时,Redis将立即更新“喜欢的计数”,因为Dynamo流
  • 客户端查询排行榜=>API将从“Redis”查询并返回到客户端