像 Snapchat 一样构建 Firebase 数据库
Structuring Firebase database like Snapchat
我一直在研究 snapchat 克隆,以此来学习如何使用 firebase。
我目前一直在思考如何最好地构建我的数据,以便我可以模仿一个简单版本的 Snapchat。
我想在简化版中做的事情:
- 向多个用户发送图片消息
- Post 将图片消息发送到“故事”提要,我所有的朋友都可以看到它。
我真的不需要什么了。我没有尝试实现能够发送短信或类似内容的 snapchats 当前功能。我只想将照片发送给朋友,同时 post 将它们发送到 public 供稿。
我的数据结构如下:
分解:
用户:
用户之间的友谊结构如下:
个别消息结构如下:
这样的对话索引:
现在,我已经在堆栈和在线上看到大量用于在聊天应用程序中构建消息的 post。我坚持的是如何构建我的数据库,以便可以将消息发送给用户,以便只有接收用户的用户才能看到它。
我一直在阅读 firebase 文档,我知道我应该对数据进行非规范化,以便我可以更有效地读取数据,但我无法真正了解使用 Firebase 的最佳方式。
在我当前的 user-messages
实施中,我必须在我的代码中实施检查以查看消息是否由我的用户发送,然后阻止用户看到它。理想情况下,只有接收消息的人才能看到图像。 (就像 snapchat)
有什么建议吗?
我需要参考用户树中的 chat/message 吗?
问题似乎是
how to structure my DB so that a message can be sent to a user so that
only that users receiving users see it
有很多'directions'但这里有两个。
1) 手动 'tell' 每个用户关于一张图片
users
uid_0
pics_for_me
pic_0
url: "http://...."
pic_1
url: "http://...."
my_users
uid_2: true
uid_1
pics_for_me
my_users
uid_0: true
uid_2: true
有了这个结构,uid_1 有两个用户想与他们分享照片(uid_0 和 uid_2)所以当需要分享照片时,阅读 my_users 节点,对其进行迭代,并将 link 存储到该用户各自的 pics_for_me 节点中的图片。显然你可以存储其他数据,比如它来自谁等。当 uid_0 登录时,读取 pic_for_me 节点并查看图片,完成后可能会删除它。
2) 观察某个用户的图片节点
users
uid_0
name: "Henry"
uid_1
name: "Joe"
all_pics
pic_0
for_user: "uid_0"
url: "http://..."
在这种情况下,uid_0 登录并向 all_pics 添加查询以查找包含其用户 ID 的任何 for_user。这适用于 1-1 情况,其中图片是针对一个用户的。如果您希望多个用户获得一张照片,那么...
all_pics
pic_0
uid_0: true
uid_1: true
并且当用户登录时向 all_pics 添加一个查询,其中该用户的 uid 为真,然后任何时候添加具有其 uid child 的图片时,他们将收到一个事件。
我一直在研究 snapchat 克隆,以此来学习如何使用 firebase。
我目前一直在思考如何最好地构建我的数据,以便我可以模仿一个简单版本的 Snapchat。
我想在简化版中做的事情:
- 向多个用户发送图片消息
- Post 将图片消息发送到“故事”提要,我所有的朋友都可以看到它。
我真的不需要什么了。我没有尝试实现能够发送短信或类似内容的 snapchats 当前功能。我只想将照片发送给朋友,同时 post 将它们发送到 public 供稿。
我的数据结构如下:
分解:
用户:
用户之间的友谊结构如下:
个别消息结构如下:
这样的对话索引:
现在,我已经在堆栈和在线上看到大量用于在聊天应用程序中构建消息的 post。我坚持的是如何构建我的数据库,以便可以将消息发送给用户,以便只有接收用户的用户才能看到它。
我一直在阅读 firebase 文档,我知道我应该对数据进行非规范化,以便我可以更有效地读取数据,但我无法真正了解使用 Firebase 的最佳方式。
在我当前的 user-messages
实施中,我必须在我的代码中实施检查以查看消息是否由我的用户发送,然后阻止用户看到它。理想情况下,只有接收消息的人才能看到图像。 (就像 snapchat)
有什么建议吗?
我需要参考用户树中的 chat/message 吗?
问题似乎是
how to structure my DB so that a message can be sent to a user so that only that users receiving users see it
有很多'directions'但这里有两个。
1) 手动 'tell' 每个用户关于一张图片
users
uid_0
pics_for_me
pic_0
url: "http://...."
pic_1
url: "http://...."
my_users
uid_2: true
uid_1
pics_for_me
my_users
uid_0: true
uid_2: true
有了这个结构,uid_1 有两个用户想与他们分享照片(uid_0 和 uid_2)所以当需要分享照片时,阅读 my_users 节点,对其进行迭代,并将 link 存储到该用户各自的 pics_for_me 节点中的图片。显然你可以存储其他数据,比如它来自谁等。当 uid_0 登录时,读取 pic_for_me 节点并查看图片,完成后可能会删除它。
2) 观察某个用户的图片节点
users
uid_0
name: "Henry"
uid_1
name: "Joe"
all_pics
pic_0
for_user: "uid_0"
url: "http://..."
在这种情况下,uid_0 登录并向 all_pics 添加查询以查找包含其用户 ID 的任何 for_user。这适用于 1-1 情况,其中图片是针对一个用户的。如果您希望多个用户获得一张照片,那么...
all_pics
pic_0
uid_0: true
uid_1: true
并且当用户登录时向 all_pics 添加一个查询,其中该用户的 uid 为真,然后任何时候添加具有其 uid child 的图片时,他们将收到一个事件。