在NoSQL(Firestore)中检查现有相关文档的有效方法?

时间:2019-07-03 21:11:55

标签: firebase google-cloud-firestore nosql

遵循当前数据模型

git rebase

现在,如果用户访问了一个视频,我想显示他是否喜欢该视频(类似于YouTube按钮的颜色,如果您已经喜欢的话)。

我当前的方法是使用登录的UserID的密钥查询文档,如果找到该文档,则表示用户喜欢该视频。问题是我为演出者准备的,您可以订阅的内容与youtube上的频道过于相似。

仅此一项,就产生了我在“页面加载”中获得的初始读取次数的3倍左右。 我想听听是否有更有效的方法来查询此类事物或构建数据。

请注意,如果您建议我将所有喜欢的节目存储在用户或节目文档中,由于1MB的限制,这是不可扩展的。

2 个答案:

答案 0 :(得分:0)

1)您可以在“用户”上有一个子集合,用于存储喜欢的帖子的ID。

2)您可以创建一个users_likes集合,其中ID为用户ID,内部有一个数组,其中包含用户喜欢的帖子的ID。

3)最后,只需在用户集合上制作名为likes的道具并存储帖子ID。

所有选项都有一个权衡,我希望在加载时让一个用户和posts_likes查询保持在内存中(没有外部用户会影响这一点)。

Be aware that if you suggest me to store all liked Shows in the User or Show Document that this is not scalable due to the 1MB Limit.

如果您希望用户喜欢超过1百万条信息...否则,存储1Mb的唯一ID是个好主意...我使用相同的模式进行user events跟踪,定义的事件(等同于您的帖子),并且用户执行与这些事件相关的操作(您的喜欢),我的案例超过80K,并且就像魅力一样工作。我给了您3种选择,我会说,从3开始直到它不起作用,然后转到2并进行相同的处理,直到1。由于您将使用ID数组,因此请使用this

答案 1 :(得分:0)

  

我当前的方法是使用登录的用户ID的密钥查询文档,如果找到该文档,则表示用户喜欢该视频。

是的,这是正确的方法。

  

仅此一项就创造了我在“页面加载”中获得的初始读取次数的3倍。

我不知道这是哪里来的,但是肯定有问题。不幸的是,您的问题中没有任何东西可以帮助我解决问题。

  

我想听听是否有更有效的方法来查询此类事物或构建数据。

我对您的架构了解不多,但是我会以这种方式构造数据库:

Firestore-root
   |
   --- users (collection)
   |    |
   |    --- uid (document)
   |         |
   |         --- //user properties
   |
   --- video (collection)
        |
        --- videoId (document)
             |
             --- likedBy: ["uid", "uid", "uid"]

如您所见,likedBy属性的类型为array。因此,一旦获得视频文档,您就可以简单地根据uid数组检查登录用户的likedBy。如果存在,则表示用户已经喜欢该视频,否则不喜欢。