【发布时间】:2015-05-16 08:07:32
【问题描述】:
我有这个数据结构:
{
userId: {
userId:
{
messageId:
(...)
}
(...)
}
(...)
}
对于给定的顶级userId,我想观察其所有userId 子级。
可以观察到 100 个子路径。
并行观察 100 个 firebase 路径会不会效率不高?
编辑:
具有适当索引的新数据结构:
/messages indexed on chatIds
{
chatId: (chatId of the chat it belongs to)
fromUserId:
...
}
/chat indexed on userIds
{
userId1: (users of the chat whose id are ordered alphabetically)
userId2:
...
}
工作流程:
app获取当前userId->获取userId上的聊天索引列表->获取chatId上索引的聊天对应的消息
【问题讨论】:
-
什么意义上的低效?带宽使用?检索数据所需的时间?代码量?代码复杂度?你打算如何倾听所有路径?另外:您想到的替代方案是什么。我们更容易回答“哪种方法更有效:A 还是 B?”而不是“这可能效率低下吗?”。
-
我在询问代码复杂性。在 iOS 上,当应用程序变为活动状态时,我会监听当前用户(顶级用户 ID)的所有发件人的用户 ID(第二级用户 ID)。它允许应用程序观察发送给用户的每条消息。由于路径更精确,这种数据结构可以更快地获取数据。听很多路径会减慢 iOS 设备的速度吗?
-
我已经用可能的解决方案编辑了我的问题。但是,如果在子键上建立索引,在可能数十亿行中检索数百行是否有效?
-
从索引查询比遍历所有项目更高效。但没有什么比直接访问更好的了,即
ref.child('messages-for-user').child(auth.uid)。 -
感谢您的回答。观察设备上的大量路径怎么样:会消耗大量 CPU 或内存吗?