Firebase-服务器端功能onUpdate()

时间:2018-08-16 08:57:27

标签: firebase google-cloud-firestore google-cloud-functions

我刚接触Firebase,想向您寻求帮助: 我发现firebase在某些事件上运行服务器端功能。这些功能之一是onUpdate()

所以我要实现以下目标: onUpdate()->按得分对集合中的文档进行排序->对(1, 2, 3, etc.)进行排序后,根据位置分配排名

有关如何执行此操作的任何提示?

PS:该数据库最多可以容纳1个Mio. +文档,因此我不确定它是否是一种有效的方法。我按分数分配排名的其他所有方法要么在客户端上太繁琐,要么不实时,要么花费大量金钱。

编辑: 正如安格斯·泰(Angus Tay)所指出的那样,我不必担心性能,所以这是没有道理的。

预先感谢:)

1 个答案:

答案 0 :(得分:1)

参考MongoDB NoSQL Documentation

  

可扩展性不仅仅是速度。它涉及3种不同的指标,这些指标通常可以协同工作:

     

集群规模。通常跨100多个节点分布数据库   多个数据中心

     

绩效等级。每个数据库可支持100,000多个数据库读写   第二,同时保持严格的延迟SLA

     

数据规模。在数据库中存储10亿多份文档

Firebase数据库(实时数据库/ Cloud Firestore)中, 性能 可扩展性

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

因此,您不必担心性能。

更新

从根本上讲,回到您的问题:

  

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

,您可以实现,但是不推荐,因为查询它的费用非常高 strong>由于您正在使用Firebase云服务,因此即使您拨打电话,每个查询也很重要!这是关于How we spent 30k USD in Firebase in less than 72 hours的主题。关于如何预防此问题的方法tutorial,但它在Angular中。

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

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

通常,我们不仅仅在服务器上做,甚至在服务器上,我们都将构建一个使其成为客户端的前端,所以,希望它能给您一个想法。

附加说明:

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

不要限制您在NoSQL中的思维,您有多种方法来构建数据库,发挥创造力,在NoSQL中始终有多种解决方案

干杯!