有效地存储和检索喜欢

Efficiently storing and retrieving likes

在我的 Firebase 数据库中,我有 posts,然后经过身份验证的用户可以 "like" posts。我怎样才能有效地获得 post 收到的点赞数。我知道使用 MongoDB 我可以 add/remove 用户的 id 到列表,然后使用 MongoDB 函数非常快速地获取它的长度并将其设置为等于喜欢的数量,但我我不知道如何使用 Firebase 做到这一点。我也可以 add/remove 它到列表并增加一个 likeCount 变量,但这似乎会导致并发问题,除非 Firebase 有一个函数。我可以调用哪些函数来最好地处理这个问题并很好地扩展?提前致谢!

你可以做两件事:

1) 创建一个votes节点,以UID为key,value为所有投票的总和。

post:{
  //All the data
  likes:{
     $user_1:1,
     $user_2:-1,
  }
}

然后只获取一个 SingleValue 事件或一个 Value 事件(取决于您是否要跟踪更改)并对所有子项求和

2)你可以使用一个事务块,只保存一个值并根据投票数增加或减少它

(这里是 link,您可以在其中找到 android、iOS 或 java 的交易) https://firebase.google.com/docs/database/web/save-data#save_data_as_transactions

 post:{
   //All the data,
   likes:2,
 }

这实际上取决于您要存储多少信息,以及用户一次可以做什么 he/she 已经投票给一些 post,

我建议同时使用两者,以保持用户喜欢的灵活性(就像在 Facebook 中一样),这样他就可以不喜欢某些东西并使用带有数字的交易来保持它的可扩展性..所以如果 post 得到1,000,000 次点赞您不必在每次有人加载 post

时计算 1,000,000 次点赞