我正在编写一个聊天应用程序,我需要在其中检查两个用户u1
和u2
是否有以前的对话。如果有,则检索conversationId
并将消息发送到该端点。否则,创建一个新对话。
我的数据结构看起来像这样。
userconversations:
userId1:
conversationID1:
participants:
user1: true
user2: true
conversationID2:
participants:
user1: true
user7: true
在我的应用中,我想从userconversations/userId1
中读取所有数据,并遍历列表以确定user2
是否在对话中。
我的问题是如何设计班级,以便快速反序列化此数据并避免使用getChildren()
调用对其进行迭代?
如果我规范化数据并保留不同的conversationId -> participants
映射,那么对于每个会话ID,我将不得不查询该流以获取数据。如果一个用户可以进行100次对话,那么这将非常缓慢且耗费资源。
请随时提出解决我的目的的替代方案设计。
答案 0 :(得分:1)
由于键user1
,user2
和user7
是动态的,因此无法将它们自动序列化为POJO的属性。最好的办法是使用GenericTypeIndicator或强制类型转换Map<String, boolean>
从participants
获得(Map<String, boolean>)snapshot.child("participants").getValue()
。