云开发 数据库查询 并发错误
发布于 6 年前 作者 tao46 4888 次浏览 来自 问答

云开发数据库 并发限制 是多少?文档上写的是会等待

  • 当前 Bug 的表现(可附上截图)

2018-10-10T23:36:14.696Z 4642c8cc-cce5-11e8-a0af-525400e8849e { Error: errCode: -501004 exceed concurrent request limit | errMsg: Concurrent request exceeded the limit; 

    at new CloudSDKError (/var/user/node_modules/wx-server-sdk/index.js:2425:28)

    at Object.returnAsCloudSDKError (/var/user/node_modules/wx-server-sdk/index.js:2477:16)

    at Object.checkError (/var/user/node_modules/wx-server-sdk/index.js:1260:23)

    at Query.<anonymous> (/var/user/node_modules/wx-server-sdk/index.js:1324:41)

    at step (/var/user/node_modules/tslib/tslib.js:133:27)

    at Object.next (/var/user/node_modules/tslib/tslib.js:114:57)

    at fulfilled (/var/user/node_modules/tslib/tslib.js:104:62)

    at <anonymous>

    at process._tickCallback (internal/process/next_tick.js:188:7)

  errCode: -501004,

  errMsg: 'Concurrent request exceeded the limit; ' }

  • 预期表现

数据库请求并发数量,如同时有三十个数据库操作请求,则有二十个会同时执行,剩下十个在队列中等待有空余资源再执行

  • 复现路径
  • 提供一个最简复现 Demo

使用文档上的代码 数据较多的时候出错

示例代码 3:取集合所有数据

获取集合中的所有待办事项清单:因为有默认 limit 100 条的限制,因此很可能一个请求无法取出所有数据,需要分批次取:

const cloud = require('wx-server-sdk')
cloud.init()const db = cloud.database()const MAX_LIMIT = 100exports.main = async (event, context) => {  // 先取出集合记录总数
  const countResult = await db.collection('todos').count()  const total = countResult.total  // 计算需分几次取
  const batchTimes = Math.ceil(total / 100)  // 承载所有读操作的 promise 的数组
  const tasks = []  for (let i = 0; i < batchTimes; i++) {    const promise = db.collection('todos').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
    tasks.push(promise)
  }  // 等待所有
  return (await Promise.all(tasks)).reduce((acc, cur) => {    return {      data: acc.data.concat(cur.data),      errMsg: acc.errMsg,
    }
  })
}
1 回复

这是超出数据库请求并发上限了,可以控制并发数,或者可以申请提高配额(https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference/quota.html

回到顶部