在Firebase数据库中哪些更贵。附加或执行递归调用

时间:2018-01-04 04:32:16

标签: firebase firebase-realtime-database

情景:

  • 手机执行触发firebase功能的操作
  • firebase函数将在完成后写入实时数据库
  • 手机确切知道firebase功能将写入的位置

问题1:

什么更便宜?

1. 附加到该位置,直到值不为零或

2. 反复获取该位置,直到值不为零。

问题2:

重复获取返回nil会导致协议开销调用(例如http或ssl)。一个理论上的例子:假设我从一个不存在的位置获取了10亿次(有价值为零)。谷歌会收取这些电话的费用吗?

另一个理论:假设有10亿部手机每次拨打一个零值。谷歌会对此收费吗?

我做过的实验:

我一直在附近这个位置,但决定重复获取数据。

我运行的代码(转为伪):

func recursiveFetch() {
    Log.test("Another call")
    firebaseFetch(withKey: "abc123") { (data: [String:Any]) in

        if data != nil {
            //complete
        } else {
            recursiveFetch()
        }
    }
}

结果:

使用普通的wifi,它会在获得结果之前递归进行9次调用。

Persistance Off normal Wifi
19:58:10.721 TEST  ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:10.842 TEST  ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:10.931 TEST  ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:11.051 TEST  ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:11.118 TEST  ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:11.235 TEST  ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:11.316 TEST  ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:11.427 TEST  ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:58:11.499 TEST  ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call

使用高延迟wifi,需要2次通话。

persistance off high latency
19:59:06.655 TEST  ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call
19:59:06.737 TEST  ❇️❇️❇️❇️ in EpisodeCellPresenter.swift:updatePinButtonLabelAfterAction():56:: Another call

我的情况的钱问题

是否连续9次调用nil位置,然后最终获得的结果是第10次尝试更多或更少比附加到该位置更贵?

1 个答案:

答案 0 :(得分:0)

您只想在工作完成后聆听您知道将要更改的位置,然后停止聆听。其他任何事都浪费时间和代码。