如何构建firebase数据库,以便用户能够使用最喜爱的产品,从而在价格和时间上最大限度地降低成本?

如何构建firebase数据库,以便用户能够使用最喜爱的产品,从而在价格和时间上最大限度地降低成本?,firebase,firebase-realtime-database,google-cloud-firestore,Firebase,Firebase Realtime Database,Google Cloud Firestore,我试图了解如何最好地构建数据库,以适应喜欢某个产品的用户。 我对以下两种方法感到矛盾。在上下文中,我的产品在实时数据库中,我的用户模型和最喜欢的模型在Firestore中 一,。 当用户收藏某个项目时,在Firestore中使用productID和userID创建一个新的收藏对象。这意味着要获得收藏数量最多的产品,我必须按产品id对收藏对象进行排序,并计算出最高的收藏数量。要返回用户的收藏夹列表,我必须按usersID对所有收藏夹列表进行排序。-我总是可以将最喜欢的项目粘贴到类似alogia(我

我试图了解如何最好地构建数据库,以适应喜欢某个产品的用户。 我对以下两种方法感到矛盾。在上下文中,我的产品在实时数据库中,我的用户模型和最喜欢的模型在Firestore中

一,。 当用户收藏某个项目时,在Firestore中使用productID和userID创建一个新的收藏对象。这意味着要获得收藏数量最多的产品,我必须按产品id对收藏对象进行排序,并计算出最高的收藏数量。要返回用户的收藏夹列表,我必须按usersID对所有收藏夹列表进行排序。-我总是可以将最喜欢的项目粘贴到类似alogia(我正在使用它进行全文搜索)的东西中,以便更快地排序,但之后我会更新两次并存储两次

二,。 当用户喜欢某个项目时,我会增加产品上的“收藏夹数量”变量,并将productID添加到用户的收藏夹列表中。这将使获得最受欢迎的产品变得更容易,但使喜欢和不喜欢的产品变得更复杂


firebase的推荐方法是什么?第一种方法更像是一种关系数据库解决方案,而且似乎成本很高,我知道他们建议保持firebase数据库平坦。firebase在时间和成本上更便宜的选项是什么?

在Firestore中,您的第一种方法会有些昂贵,因为对于每个标记为收藏的产品,您将被收取一次文档写入费用,当您对它们进行排名时,您将被收取每个“收藏”的一次读取操作费用查询返回的对象


第二种方法听起来更好,因为您根据属性过滤产品。“喜欢”和“不喜欢”并不像你想象的那么复杂。如果您谈论的是一个列表,您可以简单地添加和删除元素,如中所述。

嗨,Alex,我很好奇这是否是一个常规协议,其中大多数信息都与我希望排名的对象相关?例如,销售之类的东西,它与进行销售的用户和销售的产品相关联。在关系数据库中,您只需为销售创建一个实体,然后管理两者之间的关系。但是,如果理解您的建议,如果我希望按最低/最高销售价格对产品进行排名,我应该将销售分别嵌入用户和产品对象中。这感觉不对/无关?我可以对销售对象进行排名,然后提取产品。这是否应该是一般协议,将大多数信息绑定到我希望排名的对象?仅当数据符合最大1MiB配额时。如果您需要检查尺寸是否符合限制并保持安全,请尝试。在关系数据库中,您只需为销售创建一个实体,然后管理两者之间的关系。NoSQL中的情况完全不同。明白了,只要我能保持在配额之下,它就可以进行更深入的研究,如果我必须写入两个模型,而不是创建新的模型?通常,我们会创建一个具有相同类型对象的列表或数组。它还将与不同的服务器一起工作。因此,你应该根据你的应用程序的用例和你打算执行的查询选择使用一种或另一种解决方案。在不知道你的应用程序的用例的情况下,我不能推荐任何东西。我只能说,双方合作得非常好。如果您需要更多信息,请发布新问题,以便我和其他Firebase开发人员可以帮助您。