这是一个使用Firebase的群聊应用。我有几个数据模式选项,我不知道什么是更好的性能和更少的数据使用。
假设有10个房间。这个房间已经制作完成。
每个房间的id是[A,B,C,D,E,F,G,H,I,J]
选项1
/ users
/间
/ messages
选项2
/ users
/间
哪个更好?我第一次计划使用选项1.为了减少数据使用量,我想分别处理房间的简要信息和消息。但在开发过程中,我意识到firebase的数据库是由特定的键处理的......
例如,当用户访问房间时,
在/users/$uid/joined
更新他/她的加入会议室信息,需要
在/rooms/$roomKey/users
更新房间的加入用户,需要roomKey,我必须使用房间的ID(A)查询
访问会议室后,在/rooms/$key/messages
处获取邮件,其密钥与上述$roomKey
不同。
上面是选项1的场景,如果我使用选项2,我不需要在不同的路径中再次获取消息。但是我之所以问这个问题的原因,那么如何渲染“加入房间列表”屏幕呢?每个房间都应该有一个简短的信息,如标题,用户数,未读消息数。如果我将消息发送到/rooms
,则会一起查询消息。对?
我认为消息是最大的数据量。我该如何建立这种数据结构?
答案 0 :(得分:0)
我会选择2.选项,因为它更容易管理安全规则,但1.选项没有错误或错误^^
如果您想保持较小的数据大小并且不想浪费任何东西,可以选择以下结构:
@[Link("soundio")]
lib LibSoundio
MAX_CHANNELS = 24
struct ChannelLayout
name : LibC::Char*
channel_count : LibC::Int
channels : ChannelId[MAX_CHANNELS]
end
enum ChannelId
Invalid = 0
FrontLeft = 1
FrontRight = 2
FrontCenter = 3
# ...
end
# ...
end
现在你只加载当前所需的孩子。但是你的安全规则仍然很紧凑。
答案 1 :(得分:0)