Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase FireStore/CloudDatastore上的聚合。是否在创建/更新时使用云功能?_Firebase_Google Cloud Datastore_Google Cloud Functions_Google Cloud Firestore - Fatal编程技术网

Firebase FireStore/CloudDatastore上的聚合。是否在创建/更新时使用云功能?

Firebase FireStore/CloudDatastore上的聚合。是否在创建/更新时使用云功能?,firebase,google-cloud-datastore,google-cloud-functions,google-cloud-firestore,Firebase,Google Cloud Datastore,Google Cloud Functions,Google Cloud Firestore,我想创建一个费用追踪器,我想知道的一件事是我每个月在每个类别上花了多少钱 我应该如何在FireStore/DataStore中执行此操作 下拉所需数据并在本地进行聚合?看起来很慢 是否每次创建/更新事务时都执行聚合并将其保存在表中?但这可能会导致许多函数调用,这可能代价高昂 有更好的办法吗?似乎2是目前最好的选择?但我想知道是否还有其他方法可以降低成本 我注意到,我可能不需要实时聚合数据,所以有没有办法消除云函数执行的影响?因为我注意到有时候,我会批量插入一组事务。想知道是否有一种方法可以禁用某

我想创建一个费用追踪器,我想知道的一件事是我每个月在每个类别上花了多少钱

我应该如何在FireStore/DataStore中执行此操作

  • 下拉所需数据并在本地进行聚合?看起来很慢
  • 是否每次创建/更新事务时都执行聚合并将其保存在表中?但这可能会导致许多函数调用,这可能代价高昂 有更好的办法吗?似乎2是目前最好的选择?但我想知道是否还有其他方法可以降低成本


    我注意到,我可能不需要实时聚合数据,所以有没有办法消除云函数执行的影响?因为我注意到有时候,我会批量插入一组事务。想知道是否有一种方法可以禁用某些查询的函数,并在批处理完成后手动调用它们

    您描述的两种方法确实是最常见的

    最好的方法主要取决于您拥有的事务数量。如果事务很少,那么在每个客户机上进行聚合就完全可以了。但是,当您获得更多的事务时,下载数据的开销将变得令人望而却步,您更可能希望在数据库中保持一个运行总数

    我通常会建议在任何交易中保持总额最新。通过使用事务(防止多个用户相互覆盖更新)和服务器端安全规则(防止恶意参与者编写与其事务不匹配的聚合),您甚至可以通过客户端代码实现这一点

    如果您希望成批聚合,您将希望定期在您控制的服务器或云函数中运行代码

    云函数中没有内置任何东西来消除文档写入的影响。您可能会在Firestore中保留一个去盎司计数器,但那将是在每个事务上读/写一个文档

    更合理的做法似乎是在计时器上运行一个函数,如本文所述和视频所示。但您需要确保在这种情况下,您的数据结构允许代码检测需要聚合的事务

    实现这一点的一种方法是确保可以以某种方式对事务进行排序,例如,为事务提供
    时间戳
    ,并让聚合代码跟踪(可能在数据库中)它已聚合的最后一个时间戳。然后,每当聚合器运行时,它都会:

  • 读取当前聚合值
  • 查询数据库中自上次运行以来添加的事务
  • 在这些事务上循环,更新聚合值
  • 将聚合值和最后一个时间戳写入事务中的数据库(以确保两者都已写入,或两者均未写入)

  • 请分享这是否仍然是最好的方法,或者现在是否有任何新的聚合方法可用。