我有一个关于数据库建模的问题。我在我的安卓应用程序中使用Firebase数据库,我有一个名为chatRooms
的集合。该集合中的每个文档都包含以下字段:
聊天室名称. messages
).
每个文档还指向另一个集合messages
,其中的每个文档包含:
消息发送方的
我想添加支持的“看”选项,这意味着我想知道我是否有新的消息在聊天室。如果我进入所有聊天室的屏幕,我想知道是否有一个聊天室我没有看到,然后我可以“大胆”的聊天室(或做其他事情,以表明用户有新的消息在那个聊天室)。起初,我想在chatRooms
级别创建一个数组,该数组将包含所有看到最新消息的用户。但我认为它可能会导致比赛条件,因为它需要时间的消防功能运行。在数据库中支持“新消息”的最佳方式是什么?我希望听到一个数据库建模建议(例如,保留哪个字段以及处理它的位置)。
发布于 2020-08-07 20:36:53
最简单的方法是跟踪每个用户在每个聊天室中看到的最新消息的时间戳。您可以在客户端代码中这样做,无论是在为聊天室加载数据时,还是在屏幕上以类似于if (msg.timestamp > user["last_seen."+room_id]) userDocRef.update("last_seen."+room_id, msg.timestamp)
的方式显示消息时。
然后,为了确定哪个聊天室有新消息,您可以比较该聊天室上一次更新的时间戳和该聊天室用户的最后一次似乎时间戳。
我会将这些值存储在用户的文档中,作为一个映射:$chatroomid: timestamp
。这样,当用户文档被删除时,数据将自动清理,它具有与用户文档的其余部分一致的访问控制,而且您似乎不太可能想要为用户查询单独的房间时间戳,或者这些时间戳将超过文档的1MB大小限制。
https://stackoverflow.com/questions/63308561
复制相似问题