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中构造数据的正确方法吗
- 我是否正确使用索引
- 对于一个数字,获取消息历史记录(可能有数百条消息)似乎非常慢。如何进一步优化