通过分区页面进行节流dynamodb查询

时间:2018-07-21 00:09:46

标签: node.js amazon-dynamodb dynamodb-queries

我是DynamoDB和Node.js的新手。我有运行良好且快速的代码。甚至可能太快了。它立即达到了RCU限制(即使设置得很低也可以进行自动调整)。现在,我知道我可以调整RCU的容量,但是这会花费很多,并且我不需要快速的数据,因此我想限制我发送的请求。特别是那些请求循环通过同一分区的页面。问题是,似乎所有“超时”和“延迟”都被忽略了。您可以在我尝试将注释过的地方塞进去但没有运气的地方看到注释的代码。

我做错了什么?感谢您的帮助

async.doWhilst(

//iteratee

(callback)=>{

    // setTimeout(callback, 5000);

    // await delay(10000)

    let params={

        TableName: table_name,

        // Limit:1,

        ProjectionExpression:'Events,SortKey',

        KeyConditionExpression: "PartitionKey = :p and SortKey >= :s",

        ExpressionAttributeValues:{

            ":p":{

                N:partition+''

            }

            ,":s":{

                N:lastSortKey

            }

        }

    }

    if(!_.isEmpty(startKey)){

        params.ExclusiveStartKey=startKey;

    }

    // setTimeout(function(){

        //delay(10000).then(

            dynamodb.query(params,(err,data)=>{

                if(err){

                    console.log(err);

                    callback(err,{});

                }else{

                    if(typeof data.LastEvaluatedKey !== 'undefined'){

                        startKey=data.LastEvaluatedKey

                    }else{

                        startKey=[]

                    }

                    if(!_.isEmpty(data.Items)){

                        results=_.union(results,data.Items)

                    }

                    pages++



                    callback(null,results)

                }

            })// },5000)

        )

    // },5000)

},

//truth test

()=>{

    if(_.isEmpty(startKey)){

        return false;

    }else{

        return true;

    }

},

//callback

(err, data)=>{

    if(err){

        console.log(err)

    }else{

        console.log(data)

    }

}

0 个答案:

没有答案