【问题标题】:Streaming data from Firebase Realtime Database从 Firebase 实时数据库流式传输数据
【发布时间】:2018-11-15 01:06:09
【问题描述】:

我的实时数据库中有超过 20,000 个文档。我需要流式传输它们,但我什至不确定如何开始使用它。这就是我想要的目标

sendEmail.get('/:types/:message', cors(), async (req, res, next) => {
    console.log(5);
    const types = JSON.parse(req.params.types);
    console.log('types', types);
    let recipients = [];
    let mails = [];
    if (types.includes('students')) {
        console.log(1);
        const tmpUsers = await admin.database().ref('Users').orderByChild('student').equalTo(true).once('value').then(r => r.val()).catch(e => console.log(e));
        recipients = recipients.concat(tmpUsers);
    }
    if (types.includes('solvers')) {
        console.log(2);
        let tmpUsers = await admin.database().ref('Users').orderByChild('userType').equalTo('person').once('value').then(r => r.val()).catch(e => console.log(e));
        tmpUsers = tmpUsers.concat(arrayFromObject(await admin.database().ref('Users').orderByChild('userType').equalTo('company').once('value').then(r => r.val()).catch(e => console.log(e))));
        recipients = recipients.concat(tmpUsers);
    }
});

但是这段代码导致我的服务器内存不足。有人在我之前的问题中建议了流,但尽管我很喜欢这个想法,但我不知道如何实际进行流。我知道它应该是这样的:

const fs = require('fs');
const readStream = fs.createReadStream('path goes here');
const data = [];
readStream.on('data', chunk => {
    data.push(chunk);
})
readStream.on('end', () => {
    console.log(data);
    res.end(data);
});

但是我到底如何将 firebase 查询传递到路径中?

我试过这个,但它说Argument type Promise is not assignable to parameter type PathLike,这是有道理的,但我该如何绕过它呢?

const users = fs.createReadStream(admin.database().ref('News').once('value').then(r => r.val()))

总结一下:如何从 Firebase 实时数据库流式传输数据?

编辑: 怎么是复制品?这是两个完全不同的问题。起始代码是一样的,但我问的解决方法完全不同

【问题讨论】:

  • 这是怎么复制的?这是两个完全不同的问题。起始代码是一样的,但我问的解决方法完全不同

标签: javascript node.js firebase firebase-realtime-database stream


【解决方案1】:

实时数据库没有任何流式 API。当您执行查询时,整个结果集总是一次性加载到内存中。

一种可能的替代方法是使用limitToFirst() 以及一些查询排序来翻阅结果,这样您就可以在处理完第一批项目后执行后续查询,从最后一个查询停止的地方开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 2021-12-03
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    相关资源
    最近更新 更多