我正在开发一个会获得很多点击量的 api,所以我缓存了它。每个调用都会有一组 ids 需要在请求本身中传递,并且由于设计问题我不能使用批处理来获取项目。所以我为所有的eventIds多次调用get操作
async function getSummaryFromDax(id) {
const perf = perfMeasure({enable: true});
let params = {
TableName: Table,
Key: {
id
}
};
//todo dax not working as expected.
perf("parallel");
const result = await daxCacheClient.get(params).promise();
perf("parallel");
return {result: result.Item,perf: perf._summary};
}
此函数模拟功能。我只是硬编码了id。
const {queryStringParameters= {}} = event;
const {calls = 1, id = "CwjPJ4rcdIOOi3yFhpHhDiHzHKo-w8aRaVAYR"} = queryStringParameters;
dummy.length = calls;
dummy.fill(id);
const proms = dummy.map(async id=>{
return getSummaryFromDax(id)
})
const response = await Promise.all(proms);
perf("handler");
如果调用 =1,则意味着将完成 1 db get 调用。获得数据库响应所需的时间是2ms。当我增加调用计数时,例如100 ,每次获取操作的平均性能为200 毫秒。为什么会这样?