Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firebase聊天应用程序:查询消息,优化应为或的查询,或改进NoSQL数据库结构_Java_Android_Firebase_Firebase Realtime Database_Nosql - Fatal编程技术网

Java Firebase聊天应用程序:查询消息,优化应为或的查询,或改进NoSQL数据库结构

Java Firebase聊天应用程序:查询消息,优化应为或的查询,或改进NoSQL数据库结构,java,android,firebase,firebase-realtime-database,nosql,Java,Android,Firebase,Firebase Realtime Database,Nosql,我正在使用Firebase在Android上开发一个应用程序,它应该嵌入聊天功能 我的问题是,要获取消息,我需要在sender或receiver字段中查询所有具有我的uid的消息。这在MySQL中非常容易做到,但在Firebase中(我必须坚持使用Firebase)看起来有点痛苦 我不能就这样过滤它们。作为聊天室中对象的receiver和sender字段,我甚至不能在使用Firebase url(如Firebase.myapp.io/chat)时对它们进行过滤 因此,在这个模型中,唯一可能的解

我正在使用Firebase在Android上开发一个应用程序,它应该嵌入聊天功能

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

我不能就这样过滤它们。作为聊天室中对象的
receiver
sender
字段,我甚至不能在使用Firebase url(如Firebase.myapp.io/chat)时对它们进行过滤

因此,在这个模型中,唯一可能的解决方案是获取所有聊天记录并由客户端对其进行过滤。这几乎是做这项工作的好方法。而且,当信息很多时,如果他们应该的话,一切都可能变得极其缓慢

所以我想了不同的方法来达到这个效果:

  • 我在聊天室中获得与用户uid对应的键。在这些值中,我从用户的角度获取聊天信息,或者我从消息中获取接收者的密钥作为值
但是我不太喜欢这个,因为它可能是非常冗余的,因为每个消息都应该在数据库中插入两次

另一种方法是将消息键存储到另一个对象中,比如chatmessages,在其中我将用户uid作为值,作为包含聊天消息键的键


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

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

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

2) 然后我将这两个数字一个加一个(加法),并再次将它们转换为base64数字

3) 将结果编号用作聊天室的id

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

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

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

2) 然后我将这两个数字一个加一个(加法),并再次将它们转换为base64数字

3) 将结果编号用作聊天室的id

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

复制数据在NoSQL数据库中非常常见。请参阅,了解一种建模聊天室的方法。因此,我应该创建诸如chat_uid1_uid2和chat_uid2_uid1之类的对象?在里面,我应该正确地进行对话(带有时间和文本的消息对象,最终还有其他东西)?我经常发现自己在数据库中建模,就像我在屏幕上看到的那样。所以,如果你想要个人聊天室,我为个人聊天室建模。到底什么对你最好,取决于许多我不知道的因素(你可能也不知道)。如果你想读更多,我推荐。在NoSQL数据库中,复制数据是很常见的。请参阅,了解一种建模聊天室的方法。因此,我应该创建诸如chat_uid1_uid2和chat_uid2_uid1之类的对象?在里面,我应该正确地进行对话(带有时间和文本的消息对象,最终还有其他东西)?我经常发现自己在数据库中建模,就像我在屏幕上看到的那样。所以,如果你想要个人聊天室,我为个人聊天室建模。到底什么对你最好,取决于许多我不知道的因素(你可能也不知道)。如果您想阅读更多内容,我建议。根据字母顺序组合两个用户id并将其用作聊天室id。根据字母顺序组合两个用户id并将其用作聊天室id。