firebase - 高效存储和检索点赞

标签 firebase firebase-realtime-database

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

最佳答案

你可以做这两件事:

1) 创建一个投票节点,以 UID 作为键,并用一个值来汇总所有投票。

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

然后获取 SingleValue 事件或 Value 事件(取决于您是否想跟踪更改)并总结所有子事件

2)您可以使用交易 block 并仅保存一个值并根据投票增加或减少它

(这里是一个链接,您可以在其中找到 Android、iOS 或 Java 的交易) https://firebase.google.com/docs/database/web/save-data#save_data_as_transactions

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

这实际上取决于您想要存储多少信息,以及用户在为某个帖子投票后可以做什么,

我建议同时使用两者,以保持用户点赞的灵活性(就像在 Facebook 中一样),这样他就可以点赞某些内容,并使用带有数字的交易来保持其可扩展性。所以,如果一个帖子获得 1,000,000 个点赞,那么您就不会每次有人加载帖子时都必须计算 1,000,000 个赞

关于firebase - 高效存储和检索点赞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37603689/

相关文章:

ios - Firebase数据库误读

javascript - Firebase 查询 DataSnapshot val() 返回 null

java - unity firebase 数据库检索数据

swift - Firebase swift - 无法将类型 'FIRUserInfoImpl' 的值转换为 'NSDictionary'

firebase - 在未触发值更改时 react native firebase 数据库

firebase - Firebase:激活只读和非实时模式以提高浏览器性能

ios - 从 Firebase 数据库读取数据时出现问题

firebase - 如何在flutter中从Firebase数据库检索数据?

javascript - 从 Firebase 更新项目

firebase - 如何根据需求查询?