Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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
Flatter上Firebase实时数据库缓存行为_Firebase_Flutter_Firebase Realtime Database - Fatal编程技术网

Flatter上Firebase实时数据库缓存行为

Flatter上Firebase实时数据库缓存行为,firebase,flutter,firebase-realtime-database,Firebase,Flutter,Firebase Realtime Database,我试图了解Firebase实时数据库如何使用缓存。该文档没有阐明缓存处理的一些情况。特别是对于颤振,没有文档和在线资源是不够的。有两种不同的情况让我感到困惑 首先,我从为两种场景设置缓存开始: await FirebaseDatabase.instance.setPersistenceEnabled(true); await FirebaseDatabase.instance.setPersistenceCacheSizeBytes(10000000); 场景1:我倾听特定用户的价值观。我想只

我试图了解Firebase实时数据库如何使用缓存。该文档没有阐明缓存处理的一些情况。特别是对于颤振,没有文档和在线资源是不够的。有两种不同的情况让我感到困惑

首先,我从为两种场景设置缓存开始:

await FirebaseDatabase.instance.setPersistenceEnabled(true);
await FirebaseDatabase.instance.setPersistenceCacheSizeBytes(10000000);
场景1:我倾听特定用户的价值观。我想只加载一次用户数据。然后,始终使用缓存并仅下载更新(如果有):

final stream = FirebaseDatabase().reference().child("users").child("some_id").onValue();
据我所知,如果没有更新,Firebase将首先下载节点,然后使用缓存。即使应用程序重新启动,这也不会改变

场景2:我想查询仅在日期之后创建的帖子:

final date = DateTime(2020,6,20);
final data = await FirebaseDatabase().reference().child("posts").orderByChild("createdAt").startAt(date).once();

对于场景2,我不确定如何进行缓存。如果Firebase实时数据库缓存了查询,那么在该日期之后创建新帖子时,它会下载所有内容吗?或者,它将只下载新帖子并从缓存中获取其他帖子?

如果您有侦听器的位置/查询发生更改,Firebase将对该数据执行所谓的增量同步。在此增量同步中,客户机计算其内部版本数据的子树上的哈希值,并将其发送到服务器。服务器将这些散列与它自己的子树的散列进行比较,并且只发回散列不同的子树。这通常比完整数据小一些,但不一定是最小增量


请注意,Firebase将始终在其内存中已存在的查询/位置数据与服务器上的数据之间执行增量同步,而不管您是否启用磁盘持久性。启用磁盘持久性只意味着内存中的副本最初将从磁盘填充,但之后增量同步对这两种情况的效果相同。

因此,它只下载更新的数据,而不考虑我的查询。你还说Firebase总是发送和下载哈希来同步数据。也许这将是一个不同的问题,但它非常重要。您知道Firestore最初从服务器下载所有内容,并统计一次文档读取,即使在注册侦听器时并没有更新的数据,但Firebase数据库不会这样做。在比较Firestore和Firebase数据库的实时更新成本时,哪一种更便宜?Firestore有完全不同的数据加载机制、不同的API、不同的有线协议和不同的定价模型。我建议使用来比较哪一个对您来说更便宜,因为它几乎完全取决于您的用例和您实现它的方式。不过有一件事很常见:开发者在Firestore上比在RTDB上更快地遇到免费项目的配额限制