Firebase聊天应用:查询消息,优化应该是OR的查询,或改进NoSQL数据库结构

时间:2016-05-10 13:08:40

标签: java android firebase firebase-realtime-database nosql

我正在使用Firebase在Android上开发一个应该嵌入聊天的应用。

我的问题是要获取消息,我需要在发送方或接收方字段中查询具有我的uid的所有消息。这在MySQL中非常容易,但在Firebase中(我必须坚持使用Firebase)看起来有点痛苦。

我不能像那样过滤它们。在聊天对象的receiversender字段中,当我使用firebase.myapp.io/chat这样的Firebase网址时,我甚至无法过滤它们。

Firebase chat

因此,此模型中唯一可行的解​​决方案是获取所有聊天并对客户端进行过滤。这是完成这项工作的好方法。此外,当消息很多时,如果它们应该,那么一切都会变得非常慢。

所以我想到了实现结果的不同方法:

  • 我在聊天对应用户uid的密钥。在这些值中,我从用户的角度来看待聊天,或者我将接收器的键作为值,并在消息内部

但我不太喜欢这个,因为它可能非常多余,因为每条消息都应该在数据库中插入两次。

另一种方法是将消息密钥记忆到另一个对象中,比如chatmessages,内部我将用户uid作为值,以及包含聊天消息密钥的密钥。

管理多个私人聊天对话的最佳NoSQL方法是什么?

1 个答案:

答案 0 :(得分:0)

我目前在创建聊天应用程序时遇到了同样的问题。我最近找到了一个解决方案:

1)我基本上使用了两个用户的唯一ID,并使用ID.getBytes()将它们转换为数字。

2)然后我将2个数字一个添加到另一个(添加)并再次将它们转换为base64数字。

3)使用结果数字作为聊天室的id。

它有效,但是因为我正在为Android应用程序做这一切,它向我显示一个警告,即在主线程上做了太多工作。 如果有人知道更好的方法,请告诉我!