真实内存问题-云功能

时间:2020-10-25 18:30:25

标签: javascript node.js firebase google-cloud-firestore google-cloud-functions

基本上是尝试做一些每日用户管理工作。用户数据库有几千个用户(30个用户),但是由于大小,功能似乎很麻烦。

我尽可能地简化了功能,是的,我增加了大小和内存限制(540秒,2 GB)。

也许我在做一些愚蠢的错误,也许我需要探索其他解决方案,例如Cloud Run或App Engine或更大的东西。


module.exports = async (data, context)  => {

  // Get all of the users in the database
  const userQuery = await db.collection('users').get()

  let authPromises = []

  userQuery.forEach(userDoc => {
    
    authPromises.push(
      admin.auth().getUser(userDoc.id).then(userResult => {
        return {
          metadata: userResult.metadata,
          ...userDoc.data().arrayOfKeysIWant
        }
      })
    )    

  })

  let authResult = await Promise.all(authPromises)

  let signInCount = 0
  authResult.forEach(user => {
    if (user.metadata.lastRefreshTime) {
      signInCount += 1
    }
  })

  console.log(signInCount)

  return new Promise((res, rej) => {
    res({count: authResult.length, signInCount})
  })

}

1 个答案:

答案 0 :(得分:2)

查询所有这些文档并将它们全部同时加载到内存中绝对不能扩展。如果您有大量的文档要单独处理,则应使用pagination将查询分成多个批次。考虑到文档的内容,您应该做一些数学运算来弄清楚什么大小的页面可以合理地适合可用内存。