uni-app中用云函数读取数据库经常超时怎样解决

uni-app中用云函数读取数据库经常超时怎样解决

用云函数读取数据库经常超时,大家是怎样解决

16 回复

错误信息是什么?如果是读写数据库超时,可以按照这个文档优化下:https://uniapp.dcloud.net.cn/uniCloud/db-performance

更多关于uni-app中用云函数读取数据库经常超时怎样解决的实战教程也可以访问 https://www.itying.com/category-93-b0.html


显示超时,一共才3条数据

回复 工作人员: 错误信息贴出来一下

回复 DCloud_uniCloud_WYQ: 我也遇到了,请问会是什么原因呢,也设置了索引,但貌似不起作用,报这个: code: ““FunctionBizError”” message: ““InternalServerError:errCode: InternalServerError | errMsg: operation exceeded time limit,集合fht_log_20211012操作超时,请参照此文档进行优化:https://uniapp.dcloud.net.cn/uniCloud/db-performance””

回复 1***@163.com: 你也是数据量很小的集合报的吗?

回复 1***@163.com: 如果不是就参考提示里面的文档进行优化

回复 DCloud_uniCloud_WYQ: 集合数据量在30万以上就会报这个错了,看了下优化文档,貌似只有设置索引那个能做,但是设置了索引,也不起作用

回复 1***@163.com: 30万不至于,我们有个上千万数据的测试集合,设置合适索引的情况下查询没什么问题。你可以看一下是不是执行了带条件的count操作,或者查询条件和索引不匹配

或者使用了较大的skip

回复 DCloud_uniCloud_WYQ: 我是做了云函数URL化,在自己的管理后台调用的,看network请求2~3s,接口就返回这个错误信息了,都还没有达到超时时间,请问会是啥原因呢

回复 DCloud_uniCloud_WYQ: 用了聚合操作里面的api: let {data:yesterday} = await yesterdayCollction.aggregate() .match({ enter_time: dbCmd.and(dbCmd.gt(yesterdayBoundaries[0]), dbCmd.lt(yesterdayBoundaries[24])) }) .bucket({ groupBy: ‘$enter_time’, boundaries: yesterdayBoundaries, default: ‘other’, output: { // count: dbCmd.aggregate.sum(1), deviceIds: dbCmd.aggregate.addToSet(’$device_Id’) } }) .end()

回复 DCloud_uniCloud_WYQ: 另外我们设置的索引不是唯一的,因为有可能有重复的

回复 fuguxu: 这个超时不是指云函数的超时,而是单次数据库请求的超时。单词数据库请求超过1秒无响应就会触发超时错误。你在第一步match之后一般筛选出多少数据?

回复 DCloud_uniCloud_WYQ: 整个集合数据量在30~50万之间,第一次match总不会超过这个,个人感觉是bucket操作引起的超时,因为我把bucket去掉单纯match是没问题的,加上bucket就超时了,另外用hbuilderX在本地运行没有超时,URL化在前端调用就超时了,目前比较懵~~~

回复 fuguxu: bucket操作确实比较耗时,第一步match的时候能把筛选出的数据集尽量弄小一些应该能缓解这个问题

回复 DCloud_uniCloud_WYQ: 目前是把一次操作成分2次了,把match的数据量变小了,就没有超时~~~~

回到顶部