在 Firebase 中构建数据的一些好方法是什么?
What are some good ways to structure data in firebase?
我刚开始使用 Firebase,想知道构建数据最有效的方法是什么
让我们以一个简单的社交媒体应用程序为例,其中只能共享照片(就像 Instagram 的开端)。
用户上传了一张带有一些元数据(描述)的照片
(主页动态)用户(关注者)将按时间顺序看到 post
和offcource会有其他功能,如(喜欢post,保存,评论)
正在搜索和关注用户
关于点赞和评论的通知
在评论中搜索
什么是存储数据的好结构和尽快获取数据的好方法
我会继续并回答我将如何处理这个问题。即使问题被标记为实时数据库,我的回答也将更倾向于 Firestore。有多种方法来构造数据。这是我将在您的示例中使用的一般结构:
users
- name
- timestamp
posts
- imageURL
- description
- timestamp
- likeCount
- commentCount
posts/comments //subcollection
- userID
- comment
- timestamp
posts/likes //subcollection
- userID
- timestamp
savedposts
- postID
- userID
followers
- userID
- followedID
一些补充说明:
图片上传
此处最好的选择是将图像上传到云存储并利用云功能生成 public URL 并将其保存到 post 文档中。
评论/用户搜索
如我的评论所述,Firebase 对于基于文本的搜索没有很好的解决方案。我在我的项目中使用的解决方案是利用云函数使 Algolia 索引与我的 users
集合保持同步。然后我通过一个可调用的云函数将用户搜索卸载给他们——尽管如果你愿意,你可以直接在你的应用程序中使用 Algolia 客户端 SDK。在您的场景中,您还必须使所有评论保持同步。 Algolia 不是一项便宜的服务,所以我会研究使用文档中列出的其他选项的优缺点。
文档 ID
我通常让 Firestore 自动识别文件,但在这里我会做一些例外。对于 savedposts
和 followers
集合,我将分别使用 {userID}{postID}
和 {userID}{followedID}
的(手动)化合物 ID。它允许您执行不喜欢和取消关注的简单操作,而无需先查询文档。例如)firestore().collection('postsaves').doc(`${userID}${postID}`).delete()
最后的想法
您提到可能会迁移到 AWS。我在 Firebase 中的工作比在 AWS 中多得多,但我 都做过。在我看来,Firebase 在可用性和文档方面都是无与伦比的。在功能和微调方面有一些妥协,但如果缺乏文本搜索是唯一的障碍,我建议坚持使用 Firebase。
我刚开始使用 Firebase,想知道构建数据最有效的方法是什么
让我们以一个简单的社交媒体应用程序为例,其中只能共享照片(就像 Instagram 的开端)。
用户上传了一张带有一些元数据(描述)的照片
(主页动态)用户(关注者)将按时间顺序看到 post 和offcource会有其他功能,如(喜欢post,保存,评论)
正在搜索和关注用户
关于点赞和评论的通知
在评论中搜索
什么是存储数据的好结构和尽快获取数据的好方法
我会继续并回答我将如何处理这个问题。即使问题被标记为实时数据库,我的回答也将更倾向于 Firestore。有多种方法来构造数据。这是我将在您的示例中使用的一般结构:
users
- name
- timestamp
posts
- imageURL
- description
- timestamp
- likeCount
- commentCount
posts/comments //subcollection
- userID
- comment
- timestamp
posts/likes //subcollection
- userID
- timestamp
savedposts
- postID
- userID
followers
- userID
- followedID
一些补充说明:
图片上传
此处最好的选择是将图像上传到云存储并利用云功能生成 public URL 并将其保存到 post 文档中。
评论/用户搜索
如我的评论所述,Firebase 对于基于文本的搜索没有很好的解决方案。我在我的项目中使用的解决方案是利用云函数使 Algolia 索引与我的 users
集合保持同步。然后我通过一个可调用的云函数将用户搜索卸载给他们——尽管如果你愿意,你可以直接在你的应用程序中使用 Algolia 客户端 SDK。在您的场景中,您还必须使所有评论保持同步。 Algolia 不是一项便宜的服务,所以我会研究使用文档中列出的其他选项的优缺点。
文档 ID
我通常让 Firestore 自动识别文件,但在这里我会做一些例外。对于 savedposts
和 followers
集合,我将分别使用 {userID}{postID}
和 {userID}{followedID}
的(手动)化合物 ID。它允许您执行不喜欢和取消关注的简单操作,而无需先查询文档。例如)firestore().collection('postsaves').doc(`${userID}${postID}`).delete()
最后的想法
您提到可能会迁移到 AWS。我在 Firebase 中的工作比在 AWS 中多得多,但我 都做过。在我看来,Firebase 在可用性和文档方面都是无与伦比的。在功能和微调方面有一些妥协,但如果缺乏文本搜索是唯一的障碍,我建议坚持使用 Firebase。