Javascript 有没有办法在firebase中提出更少的请求?
实际上,我的firestore系列如下所示:Javascript 有没有办法在firebase中提出更少的请求?,javascript,reactjs,firebase,react-native,nosql,Javascript,Reactjs,Firebase,React Native,Nosql,实际上,我的firestore系列如下所示: user : |-> 0000 (uid) |-> avatar : 'url' |-> name : 'josh' |-> 1111 |-> avatar : 'url' |-> name : 'steve' [...] follow : |-> 0000 |-> 1111 : true
user :
|-> 0000 (uid)
|-> avatar : 'url'
|-> name : 'josh'
|-> 1111
|-> avatar : 'url'
|-> name : 'steve'
[...]
follow :
|-> 0000
|-> 1111 : true
|-> 8888 : true
[...]
message :
|-> 0000
|-> 8888
|-> 1264978800 (timestamp)
|-> message = "hello"
|-> 1264978987
|-> message = "How are you"
|-> 8888
|-> 0000
|-> 1264914253
|-> message = "hey dude "
|-> 1264975895
|-> message = "fine and you?"
如果我想获得0000和8888之间的个人资料和对话(以获取他们的头像为例),我需要:
感谢您的帮助。是时候考虑一下Firebase的NoSQL了。Firestore是一个实时数据库,性能非常重要。您的数据结构适用于SQL数据库,而不适用于NoSQL 以下是我为此用例提出的数据结构:
user :
|-> 0000 : //uid
|-> id : '0000'
|-> avatar : 'url'
|-> name : 'josh'
|-> follow : ['1111', '8888'] // Array of uid
|-> 1111 : //uid
|-> id : '1111'
|-> avatar : 'url'
|-> name : 'steve'
|-> follow : ['0000'] // Array of uid
[...]
message :
|-> AAAA // message id
|-> id : 'AAAA'
|-> sender
|-> id: '0000'
|-> avatar: 'url'
|-> name: 'josh'
|-> receiver
|-> id: '8888'
|-> avatar: 'url'
|-> name: 'paul'
|-> time : 1264978800 // timestamp
|-> message : "hello"
|-> BBBB // message id
|-> id : 'BBBB'
|-> sender
|-> id: '8888'
|-> avatar: 'url'
|-> name: 'paul'
|-> receiver
|-> id: '0000'
|-> avatar: 'url'
|-> name: 'josh'
|-> time : 1264978800 // timestamp
|-> message : "hey dude"
|-> CCCC // message id
|-> id : 'CCCC'
|-> sender
|-> id: '0000'
|-> avatar: 'url'
|-> name: 'josh'
|-> receiver
|-> id: '8888'
|-> avatar: 'url'
|-> name: 'paul'
|-> time : 1264978800 // timestamp
|-> message : "How are you"
|-> DDDD // message id
|-> id : 'DDDD'
|-> sender
|-> id: '8888'
|-> avatar: 'url'
|-> name: 'paul'
|-> receiver
|-> id: '0000'
|-> avatar: 'url'
|-> name: 'josh'
|-> time : 1264978800 // timestamp
|-> message : "fine and you?"
上述结构是以NoSQL方式设计的。用户的配置文件被复制多次。数据的复制可以提高性能并降低带宽和CPU成本,而这比存储成本要高得多
好处:
- 每个用户都包含有关用户的所有信息
- 每条消息都包含有关消息的所有信息
消息
发送方或接收方
在follow
中的位置
如果我想要0000的所有对话列表,我需要执行以下操作:
消息
,其中发送方
或接收方
等于'0000'
您可能遇到的其他用例:
- 好友列表,其中包含要列出的姓名和头像
follow
的映射数组来存储uid
、name
和avatar
,如果您打算对其执行多个操作,甚至可以将follow作为子集合
- 用户更改名称或化身
话虽如此,使用SQL或NoSQL显然是您的选择。两者都有各自的优点和缺点谢谢,所以如果我理解的话,不管冗余,它都是最重要的?