我的数据表结构如下:
{
_id:"自动生成",
uid:"用户id",
barcode:"条码",
pagecode:"条码页码"
}
其中,页码对应多个条码,比如我一个页码可以对应10万个条码,然后我在云函数中使用update
db.collection("表名").where({
pagecode:"页码",
uid:"用户id"
}).update({
activate:true
})
意思就是将此用户此页码的数据激活,然后数据有10万条,这个时候云函数就会报错,提示超时。。而且执行时间基本超过10秒,pagecode_uid设置了索引也没用。。云函数调成60秒时间了,求解这个超时要怎么调整?
硕菊叶
- 发布:2021-05-28 21:42
- 更新:2021-05-31 17:56
- 阅读:611
DCloud_uniCloud_WYQ
尽量分批去更新,一次更新大量数据必然是超时的,但是后台还是会去完成你的更新操作
2021-06-02 17:14
硕菊叶 (作者)
回复 DCloud_uniCloud_WYQ: 问题就在于10万条数据也不算什么大量数据吧。。而且分批更新如何更新?把所有要更新的ID查出来然后一个一个去更新??我现在是通过一个字段作为条件去更新的啊。
2021-06-07 13:59
硕菊叶 (作者)
回复 DCloud_uniCloud_WYQ: update难道还能像分页一样更新数据?
2021-06-07 14:00
DCloud_uniCloud_WYQ
回复 硕菊叶: 你也可以不等待更新,更新操作会自动完成,只是耗时超过云厂商设定的阈值就会超时而已,实际会更新成功,可以描述一下你的业务场景吗
2021-06-07 18:21
硕菊叶 (作者)
回复 DCloud_uniCloud_WYQ: 我的场景是客户扫码激活标签,可能需要一次性激活几百个,几千个,几万个或者十几万都有可能,如果不等待更新的话前端如何反馈是否更新成功呢?要是在更新的时候客户再次执行了其他更新是不是会冲突呢?
2021-06-09 16:31
硕菊叶 (作者)
回复 DCloud_uniCloud_WYQ: 就像我上面贴的代码一样的,只是将激活的字段设置为true。。10万条数据都会报错。。这有点太容易报错了吧。。
2021-06-09 16:32
硕菊叶 (作者)
回复 DCloud_uniCloud_WYQ: 而且我数据表才300W条数据,要是之后上千万条或者上亿条数据,更新是不是会更慢啊。。
2021-06-09 16:33
DCloud_uniCloud_WYQ
回复 硕菊叶: 更新的数据量越多就会越慢,任何数据库都是这个表现,你这个实现有点不太合理。
2021-06-10 10:52
硕菊叶 (作者)
回复 DCloud_uniCloud_WYQ: 那你觉得怎么实现会合理一些呢?需求就是这样,需要一次性激活10万张标签或者几十万张。。
2021-06-10 15:24
DCloud_uniCloud_WYQ
回复 硕菊叶: 如果确实有这个需求那就异步就行了,数据库请求发出去之后不用等待执行结果
2021-06-11 18:21
硕菊叶 (作者)
回复 DCloud_uniCloud_WYQ: 如果是异步的话我没办法执行下一步的操作了啊,我是激活成功后还要修改一些其他的标志位。。如果是异步没有结果的话我就没办法判断是否修改成功啊。。如果数据库执行过程中修改失败了我也没办法知道结果。。
2021-06-15 14:31