Firebase - 服务器端函数 onUpdate()



我对Firebase很陌生,想请你帮忙做点什么: 我发现Firebase在某些事件上运行服务器端功能。其中一个功能是onUpdate().

因此,我想要实现以下几点:onUpdate()-> 按分数对集合中的文档进行排序 -> 排序后根据位置分配排名(1, 2, 3, etc.)

关于如何做到这一点的任何提示?

PS:数据库可以增长到1个Mio.+文档,所以我不太确定这是否是一种有效的方法。我按分数分配排名的所有其他方式要么在客户端太重,要么不是实时的,要么花费大量的钱。

编辑:正如Angus Tay指出的那样,我不需要担心性能,所以这就

不碍事了。提前致谢:)

参考MongoDB NoSQL 文档

可扩展性 不仅仅关乎速度。这是关于 3 个不同的指标,它们通常一起工作:

群集规模。将数据库分布在 100+ 个节点上,通常在 多个数据中心

性能量表。维持 100,000+ 数据库读取和写入 其次,同时保持严格的延迟 SLA

数据规模。在数据库中存储 10 亿+ 个文档

Firebase数据库(实时数据库/Cloud Firestore(中,即使数据库已经增长到数十亿个文档,性能和可扩展性也不是问题。

NoSQL数据库支持自动分片,这意味着它们在任意数量的服务器上本地自动分布数据,甚至不需要应用程序知道服务器池的组成数据和查询负载在服务器之间自动平衡,当服务器出现故障时,可以快速透明地替换它,而不会中断应用程序。

因此,您不必担心性能。

更新

在基本面之后,回到你的问题:

onUpdate(( -> 按分数对集合中的文档进行排序 -> 排序后根据位置分配排名(1、2、3 等(

是的,您可以实现它,但不建议这样做,因为查询的成本非常高,因为您使用的是Firebase云服务,即使您拨打电话,每个查询都很重要! 这里有一个关于我们如何在不到 72 小时内在 Firebase 上花费 30k 美元的帖子。 有一个关于如何防止此问题的教程,但它是 Angular 的。

建议(客户端 - 服务器(:

  1. 创建集合以存储所有记录文档
  2. 示例:记录(文档(- 高分(字段数组(,最佳时间(字段数组(
  3. 第一个查询在应用启动时获取所需的信息(高分(存储在客户端
  4. 使用之前存储的高分检查分数。
  5. 如果更高,则仅更新该文档的字段,而不是更新多个文档

通常,我们不会纯粹在服务器中做,即使在服务器中,我们也会构建一个前端,使其成为客户端,所以,希望它能给你一个想法。

附加说明:

创建NoSQL的目的之一是避免使用关系数据库模型,因为它可能不是所有情况下的最佳解决方案。

不要限制你在NoSQL中的思维,你有很多方法来构建你的数据库,要有创造力,NoSQL中总是有多种解决方案。

干杯!

最新更新