Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';在Firebase/Cloud功能中检查一百万代码列表的最佳方法是什么?_Javascript_Firebase_Firebase Realtime Database_Google Cloud Functions - Fatal编程技术网

Javascript 什么';在Firebase/Cloud功能中检查一百万代码列表的最佳方法是什么?

Javascript 什么';在Firebase/Cloud功能中检查一百万代码列表的最佳方法是什么?,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,我正在使用Firebase的云函数来测试Firebase实时数据库中存储的一百万个预生成代码的良好价值。 它将用于移动应用程序中,以验证用户是否在现实生活中购买了捆绑包 我找到了两种可行的解决方案。首先,我将代码直接放在属性的名称中。在第二个示例中,我将代码放入名为“key”的子属性中 在第二种情况下,索引键参数 我需要快速(logn复杂度)访问才能获得响应 你知道我的任何解决方案是否能在Firebase上每秒处理大约100万条条目和100个呼叫 (我不熟悉NoSQL。) 在我的示例中,代码是“

我正在使用Firebase的云函数来测试Firebase实时数据库中存储的一百万个预生成代码的良好价值。 它将用于移动应用程序中,以验证用户是否在现实生活中购买了捆绑包

我找到了两种可行的解决方案。首先,我将代码直接放在属性的名称中。在第二个示例中,我将代码放入名为“key”的子属性中 在第二种情况下,索引键参数

我需要快速(logn复杂度)访问才能获得响应

你知道我的任何解决方案是否能在Firebase上每秒处理大约100万条条目和100个呼叫

(我不熟悉NoSQL。)

在我的示例中,代码是“ABCD-0000-000X” (不要考虑称为“用户”的属性)

第一种解决方案:将代码值用作父项

云函数源代码

exports.checkKey = functions.https.onRequest((req, res) => {
const code = req.query.code;

return admin.database().ref("Codes/" + code).once("value").then(snapshot => {
    if (snapshot.val() === null) {
        return res.send("Invalid Code");
    }

    const nb = snapshot.child("nb");

    if (nb.val() > 4) {
        return res.send("NO more code");
    }

    snapshot.ref.update({ "nb": nb.val() + 1 });
    return res.send("OK");
});
第二种解决方案:在child中使用代码


谢谢您的帮助。

您无法查询包含一百万项的列表。因此,将密钥存储为名为
key
的属性是行不通的

但是,如果将这些键保留为每个项的键,则意味着您可以通过其路径访问该项。这个比例真的很好

所以我同意你的第一种方法


这就是说:在不了解所有用例的情况下,很难推荐任何特定的东西,因为没有人(通常包括早期阶段的项目创建者)可能知道这些用例。因此,我还建议您通过阅读、观看以及在提交任何特定方法之前尝试各种方法,来学习更多关于NoSQL数据建模的知识。

请在尝试提出更多问题之前阅读。“您能帮助我了解这两种情况下会发生什么”您不明白什么?“对于100万条参赛作品和每秒100个电话来说,什么是最好的解决方案?”征求意见的问题被认为是离题的。我编辑了我的问题。我有两个解决方案,我只是想帮我找到解决问题的好方法。这对我很重要。
exports.getKey = functions.https.onRequest((req, res) => {
    const code = req.query.code;

    var ref = admin.database().ref("Codes");
    ref.orderByChild("key").equalTo(code).on("child_added", function (snapshot) {

        const nb = snapshot.child("nb");

        if (nb.val() > 4) {
            return res.send("NOK");
        }

        snapshot.child("nb").set(nb.val() + 1);

        return res.send("OK");
    }
});