【发布时间】:2016-05-10 13:08:40
【问题描述】:
我正在使用 Firebase 在 Android 上开发一个应该嵌入聊天的应用。
我的问题是,要获取消息,我需要查询在发送者或接收者字段中具有我的 uid 的所有消息。这在 MySQL 中非常容易做到,但在 Firebase 中(我必须坚持使用 Firebase)看起来有点痛苦。
我不能像那样过滤它们。作为聊天对象的receiver 和sender 字段,当我使用像firebase.myapp.io/chat 这样的Firebase url 时,我什至无法过滤它们。
因此,此模型中唯一可能的解决方案是获取所有聊天记录并通过客户端过滤它们。这几乎是完成这项工作的好方法。此外,当消息很多时,如果应该的话,一切都可能变得非常缓慢。
所以我想了不同的方法来达到这个结果:
- 我在聊天中获得了与用户 uid 对应的键。在这些值中,我从用户的角度获得了聊天,或者我将接收者的键作为值,并在消息中
但我不太喜欢这个,因为它可能非常多余,因为每条消息都应该在数据库中插入两次。
另一种方法是将消息键存储到另一个对象中,例如聊天消息,在其中我将用户 uid 作为值和包含聊天消息键的键。
管理多个私人聊天对话的最佳 NoSQL 方式是什么?
【问题讨论】:
-
复制数据在 NoSQL 数据库中很常见。请参阅 stackoverflow.com/questions/33540479/… 了解建模聊天室的一种方法。
-
所以我应该创建像chat_uid1_uid2和chat_uid2_uid1这样的对象?在里面我应该把对话放在正确的位置(带有时间和文本的消息对象,最终还有其他内容)?
-
我经常发现自己在数据库中建模,我在屏幕上看到的内容。因此,如果您想要个人聊天室,我会为个人聊天室建模。究竟什么最适合您,取决于许多我不知道的因素(您可能也不知道)。如果您想阅读更多内容,我推荐this article about NoSQL data modeling。
标签: java android firebase firebase-realtime-database nosql