【问题标题】:Firebase Firestore reads on streamsFirebase Firestore 读取流
【发布时间】:2022-01-20 21:02:43
【问题描述】:

我在我的颤振应用中使用 Firestore 流。数据是用户配置文件,因此我需要根据需要对其进行过滤。我的初始数据流如下

Stream s = FirebaseFirestore.instance
        .collection('users')
        .snapshots(includeMetadataChanges: true);

当我必须过滤数据时,我会这样做

setState((){

s = FirebaseFirestore.instance
        .collection('users')
        .where('name',isEqualTo:"MyName")
        .snapshots(includeMetadataChanges: true);

});

这工作正常,但我担心的是读取,我知道数据已缓存,并且只有在发生某些更改但我不知道流时才从服务器读取。

我尝试监控 firebase 上的使用情况,但由于该应用正在生产中,我无法正确测量任何内容。

如果通过更改流进行过滤确实会导致对 firebase 的读取,那么我还能做些什么来过滤缓存中的数据。

我想到的一件事是在本地存储所有内容,但在本地存储数千个用户的数据是不切实际的。

【问题讨论】:

    标签: firebase flutter google-cloud-firestore dart-stream


    【解决方案1】:

    流是一系列异步事件。它就像一个 异步Iterable——在哪里,而不是在何时获取下一个事件 你要求它,流告诉你有一个事件,当它发生时 准备好。 来自 Dart (https://dart.dev/tutorials/language/streams)

    流是持续的数据流,在类终止或通过取消流对象时关闭:

    streamSub.cancel();
    

    您可以在流构建器中使用流。每次对任何文档应用更改时,它都会重新构建构建器。

    StreamBuilder(
       stream: stream,
       builder: (BuildContext content, AsyncSnapshot snapshot) {
       }
    )
    

    如果查询结果中有 1 个文档发生更改,您需要支付 1 次阅读费用。您无需为未更改的单据付费。查询快照对象仅重用内存中来自先前结果集的文档数据。 道格·史蒂文森撰写 (https://stackoverflow.com/a/60062304/9142870)

    【讨论】:

      猜你喜欢
      • 2018-09-09
      • 2020-11-05
      • 2021-09-25
      • 2021-07-02
      • 2021-11-18
      • 2019-10-29
      • 2021-12-09
      • 2021-01-19
      • 1970-01-01
      相关资源
      最近更新 更多