firebase实时数据库读取速度较慢

时间:2019-01-17 01:27:19

标签: javascript firebase firebase-realtime-database

我的工作是Firebase订阅mqtt代理,并将代理收到的消息拆分为实时数据库

接收mqtt消息没有延迟,但是如果节点已经存在于数据库中并且已经存在,那么最后一个键值和数据写入操作将分别花费大约1-2秒

这是我的代码

function handleMsg(topic, payload) {
    //send message to start
    const msg_text = payload.toString()

    test_promise(msg_text)
    .then(function(snapshot){return test_promise2(snapshot);})
    .then(function(snapshot){return test_promise3(snapshot);})
    .then(function(msg){ console.log(log); log='';})
    .catch(function(msg) { console.log(log); log='';});
}
function test_promise(msg_text){
    return new Promise(function (resolve, reject){
        msg_split = msg_text.split("::");
        var db_ref = db.ref("backmountain_"+device_id+"_"+time);    
        db_ref.once('value',function(snapshot){
            //strat -> end , 1.4 ~ 2 second
            return resolve(msg_text+"::"+snapshot.exists());
        }).catch(function(err){
            return reject("test_promise reject : "+err);
        });
    });
}
function test_promise2(msg_text){
    return new Promise(function (resolve, reject){
        var db_ref = db.ref("backmountain_"+device_id+"_"+time);    
        if(chk_exists == "true"){
            //key orderByKey > orderByChild > orderByValue  
            db_ref.orderByKey().limitToLast(1).once("child_added").then( function(lastkey){
               //strat -> end , 1.4 ~ 2 second
                return resolve(msg_text+"::"+s_id);
            })
            .catch(function(err){
                return reject("test_promise2 limitToLast reject : "+err);
            });
        } else if(chk_exists=='false'){
            return resolve(msg_text+"::"+"1");  
        }
    });
}
function test_promise3(msg_text){
    return new Promise(function (resolve, reject){
        var db_ref = db.ref("backmountain_"+device_id+"_"+time);    
        db_ref.push().set({
            data
        }).catch(function(err){
            return reject("test_promise3 set reject : "+err);
        });
        return resolve("test_promise3 OK : ");
    });
}

我已经部署了一个测试功能,分解了每个数据库任务,并一次又一次地尝试了它,但是之所以发生是因为发生了相同的延迟,所以它不会因诺言而延迟

我主要处理示例,因此,如果您有其他好的方法或需要其他配置,请回答它们。

数据库结构在这里

enter image description here

1 个答案:

答案 0 :(得分:0)

Documentation说以下。为什么不将其另存为新文件,因为这已经对您有用?您可以使用Cloud Function for Firebase定期存档/删除旧邮件。

  

例如,社交博客应用可能会创建一条帖子,   同时将其更新为最近的活动提要和发布   使用以下代码的用户活动供稿:

function writeNewPost(uid, username, picture, title, body) {
  // A post entry.
  var postData = {
    author: username,
    uid: uid,
    body: body,
    title: title,
    starCount: 0,
    authorPic: picture
  };

  // Get a key for a new Post.
  var newPostKey = firebase.database().ref().child('posts').push().key;

  // Write the new post's data simultaneously in the posts list and the user's post list.
  var updates = {};
  updates['/posts/' + newPostKey] = postData;
  updates['/user-posts/' + uid + '/' + newPostKey] = postData;

  return firebase.database().ref().update(updates);
}