代码之家  ›  专栏  ›  技术社区  ›  Ben

Firestore的新闻提要采集与请求设计

  •  0
  • Ben  · 技术社区  · 7 年前

    enter image description here

    Firestore系列:

    user
    - userId 
    - userName
    - userPic
    
    post
    - postContent
    - postDate
    - userId // refers to the userId of a user stored in the users collection
    

    我认为这对我不起作用的解决方案:

    • 在应用程序启动时加载所有用户数据,然后手动将帖子中存储的用户id与加载的用户进行比较,以获取用户详细信息。 为什么不?用户太多,无法预先加载它们!

    • 将post发布到Firestore时,将用户名和用户图片保存在post文档中。 为什么不?因为发布帖子后,用户名和/或用户图片可能会更改!

    • 从Firestore获取帖子,然后在应用程序中,针对每个帖子,基于用户id从Firestore获取相应的用户数据。 为什么不?对Firestore有很多额外的请求。例如,如果我想加载10个posts,那么这10个posts将是一个请求,再加上10个按id获取每个用户的请求,总共发出11个请求。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Alex Mamo    7 年前

    你猜对了,在前两种情况下,但是第三种情况可以解决你的问题。因为在云端的火库里 Reference supported data types ,您可以利用此功能:

    项目/[项目ID]/databases/[数据库ID]/documents/[文档路径]

    您还可以通过将用户对象添加为post对象的属性来取消数据的规格化,但这意味着在用户更改名称的情况下对所有用户对象进行额外的更新。所以在这种情况下,您有太多额外的写操作。这种做法叫做 denormalization 这是一个常见的做法,当谈到消防基地。为了更好的理解,我建议你看这段视频, Denormalization is normal with the Firebase Database . 它适用于Firebase实时数据库,但同样的规则也适用于云Firestore。因此,对于你来说,重复数据和额外数据库调用的数量是最佳的,这取决于你的应用程序的用例和你的需求,以及你是否愿意放弃“单点定义思维”。