在Firebase中存储“喜欢”的最佳方法是什么?

时间:2018-07-25 17:12:01

标签: reactjs firebase data-structures

我的Firebase数据库的结构是:

users: [
    {userId: {...}}, // Private data for specific user
    ...
],
likes: [ // Everybody has access to it
    goodsId: [111, 222, 333, 444] // Users' ids
]

商品和商品的类别存储在远程服务器上,每次用户浏览商品目录或打开某些商品卡时,axios就会获取它们。我想将“点赞”存储在Firebase中而不是存储在远程服务器上。是正确的还是没有必要这样做?我还不知道是否将实时功能用于“点赞”,以及是否需要此功能。而且,我认为每个“赞”请求都是请求,并且我的Firebase配额将比平时快用完限制。 这样的结构是否可以让我迅速解决性能问题,以查找当前用户为他打开或搜索阵列的每个商品设置“喜欢”是否会导致性能问题(如您所知,可能会有大量用户)?

或者,maby从一开始就将“喜欢”存储在Firebase中是个坏主意,我应该只在其中存储非常具体的数据,因为我有配额限制-首先和第二个-我不需要每个都具有实时功能我的应用程序的实体。我只需要那些我想在reactjs Web应用程序的管理部分中实时查看的实体:订单,聊天等...

1 个答案:

答案 0 :(得分:2)

您可能具有以下结构:

{
    "users":
    {
        "id1":{}
    },
    "categories":{"cat1":{}}
    "likes":
    {
         "cat1"
         {
             "id1":true
         }
    }

}

这样一来,您可以确保一个用户只能“赞”一次,并且在数据库规则中,您可以为任何auth用户设置读取权限,但只能为您的auth id子对象设置写入权限,在这种情况下,id1参见{ {3}}

要检查喜欢人数,您可以避免获得所有喜欢,在类别子项cat1上有一个“ likeCount”字段,该字段具有一个Cloud Function,该功能每次用户喜欢某个类别时都会更新喜欢人数,请参见https://firebase.google.com/docs/database/security/securing-data

也请查看此快速入门:https://firebase.google.com/docs/functions/database-events#trigger_a_database_function

希望有帮助! ;)