遵循当前数据模型
git rebase
现在,如果用户访问了一个视频,我想显示他是否喜欢该视频(类似于YouTube按钮的颜色,如果您已经喜欢的话)。
我当前的方法是使用登录的UserID的密钥查询文档,如果找到该文档,则表示用户喜欢该视频。问题是我为演出者准备的,您可以订阅的内容与youtube上的频道过于相似。
仅此一项,就产生了我在“页面加载”中获得的初始读取次数的3倍左右。 我想听听是否有更有效的方法来查询此类事物或构建数据。
请注意,如果您建议我将所有喜欢的节目存储在用户或节目文档中,由于1MB的限制,这是不可扩展的。
答案 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
。如果存在,则表示用户已经喜欢该视频,否则不喜欢。