javascript - 单个文档的多个请求和 500000 个文档的单个请求(Cloud Firestore)哪个性能更好?

标签 javascript firebase react-native google-cloud-firestore

我想从 cloud firestore 获取 50 个用户,我有两种方法都可以。 但实际上我不知道哪一个是高性能的,因为我们国家的互联网连接很差,如果我们的重点只是获取而不是迭代

  1. 第一种方式(单个请求)

    let tempList = [];
    const matchingUsers = [user1, user2, user3, ..., user50];
    
    const snap = await db.collection('users').get();
    
    if (snap.size > 0) {
    
        sanp.docs.forEach(doc => {
    
            const data = doc.data();
    
            matchingUsers.forEach(user => {
    
                if (data.user === user) {
    
                    tempList.push(data.user);
                }
            });
    
        });
    }
    
  2. 第二种方式(多个请求)

    matchingUsers.forEach(async user => {
    
        const snap = await db.collection('users').doc(user).get();
        tempList.push(snap.data().user)
    
    });
    

最佳答案

使用第一种方法,您实际上是在获取整个用户集合,并将所有相应数据从后端 (Firestore) 传输到前端。这确实效率不高,特别是如果你想从 500k 中过滤掉 50 个用户!另请注意,您将为 500K 读取次数付费,而不是 50 次(请参阅 pricing)。

因此,仅获取您想要的文档(即恰好 50 个用户)是最有效的方法。自 get()方法是异步的,返回一个Promise,可以使用 Promise.all()如下:

const matchingUsers = [user1, user2, user3, ..., user50];
const promises = matchingUsers.map(u => db.collection('users').doc(u).get());

Promise.all(promises).then(results => {

    //results is an array of DocumentSnapshots
    //use any array method, like map or forEach      

    results.map(docSnapshot => {
            console.log(docSnapshot.data());
    });
});

正如文档中所解释的,Promise.all() 的优点是“它返回一个单个 Promise,当所有 Promise 作为可迭代对象传递时,该 Promise 就会得到满足”已完成”,使得管理不同的异步并行调用变得非常容易。

关于javascript - 单个文档的多个请求和 500000 个文档的单个请求(Cloud Firestore)哪个性能更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60575945/

相关文章:

ios - 我的 firebase int 返回 nil

javascript - 为什么 backgroundColor 不起作用(React Native)?

javascript - 在 'this' 上调用 jQuery $ 函数

django - 在 Django 中使用 Firebase 身份验证

ios - 从 Firebase 存储中删除表格 View 图像

react-native - 将世博会应用发布到 App Store/Google Play 商店

reactjs - store.getState 不是 Redux-persist 函数

带大括号 {} 的 Javascript 构造函数

javascript - 多个 onclick 按钮事件 Vanilla Javascript

javascript - 如何在 NodeJs 上创建一个包含 2 亿个元素的数组?