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中使用非规范化数据结构_Javascript_Firebase_Denormalization - Fatal编程技术网

Javascript 在Firebase中使用非规范化数据结构

Javascript 在Firebase中使用非规范化数据结构,javascript,firebase,denormalization,Javascript,Firebase,Denormalization,背景 我正在尝试构建一个简单的短信应用程序,它在根级别存储了两棵树:数字和消息——以及它们之间的双向关系 我希望能够快速获取特定号码的消息历史记录,将新消息发送到新号码,并将新消息发送到现有号码,实时呈现发送和接收的消息 我的数据结构如下所示: { "messages" : { "-KGZyhbh9sGsizizVyyq" : { "5551234" : true, "body" : "Foo" }, "-KGZykRFPtdWY2fWb62u

背景

我正在尝试构建一个简单的短信应用程序,它在根级别存储了两棵树:
数字
消息
——以及它们之间的双向关系

我希望能够快速获取特定号码的消息历史记录,将新消息发送到新号码,并将新消息发送到现有号码,实时呈现发送和接收的消息

我的数据结构如下所示:

{
  "messages" : {
    "-KGZyhbh9sGsizizVyyq" : {
      "5551234" : true,
      "body" : "Foo"
    },
    "-KGZykRFPtdWY2fWb62u" : {
      "555000" : true,
      "body" : "Bar"
    }
  },
  "numbers" : {
    "555000" : {
      "messages" : {
        "-KGZykRFPtdWY2fWb62u" : true
      }
    },
    "5551234" : {
      "messages" : {
        "-KGZyhbh9sGsizizVyyq" : true
      }
    }
  }
}
当一条新消息被发送到一个号码时,该消息被添加到
消息
下,Firebase返回一个唯一的ID,然后我用它作为键存储在
numbers/:number/messages

这是我目前用于读取数据的方法:

var ref = new Firebase('https://FIREBASE-APP.firebaseio.com/');

function fetchMessages(number) {
  var numberMessagesRef = ref.child('numbers/' + number + '/messages');
  numberMessagesRef.on('child_added', function(snap) {
    ref.child('messages/' + snap.key()).once('value', function(message) {
      displayMessage(message.val()); // Prepends an <li> in the DOM
    });
  });
}

$('#number').focusout(function() {
  var number = $(this).val();
  fetchMessages(number);
});
var ref=new Firebase('https://FIREBASE-APP.firebaseio.com/');
函数获取消息(编号){
var numberMessagesRef=ref.child('numbers/'+numbers+'/messages');
numberMessageRef.on('child_added',函数(snap){
ref.child('messages/'+snap.key()).once('value',函数(message){
displayMessage(message.val());//在DOM中预先添加一个
  • }); }); } $('#number').focusout(函数(){ var number=$(this.val(); 获取消息(数量); });
  • 问题

    • 这种数据结构是Firebase中构造数据的正确方法吗
    • 我是否正确使用索引
    • 对于一个数字,获取消息历史记录(可能有数百条消息)似乎非常慢。如何进一步优化

    通常,以这种方式从Firebase加载数据的速度比您预期的要快得多,请参阅。但也要考虑是否真的要装载几百个项目。用户不太可能会看到所有这些项目,所以为什么要加载它们?是的,很好。我想我只是用它来限制我获取的消息历史记录的数量,直到用户向上滚动或做些什么,然后再获取一些。通常,以这种方式从Firebase加载数据要比您预期的快得多,请参阅。但也要考虑是否真的要装载几百个项目。用户不太可能会看到所有这些项目,所以为什么要加载它们?是的,很好。我想我只是用它来限制我获取的消息历史记录的数量,直到用户向上滚动或者做些什么,然后再获取一些。