Ios Firebase正在添加新记录

Ios Firebase正在添加新记录,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,在将我链接到副本之前,请先阅读我的要求 我正在开发一个应用程序,它基本上有一个大约5000个团队的列表。这些团队是相当静态的(他们不经常改变)。我想观察任何时候一个被改变,虽然这是必要的,它得到的应用程序尽快更新 如果我包括dbTeams.ref.observe(.childAdded,with:{}),它将在每次应用程序启动时运行,加载所有5000条记录,尽管它们已经在持久性存储中(我已经启用了持久性) 现在文件上说这会发生,我知道,但是有5000条记录(将来可能会更多),我不能让这种情况发生

在将我链接到副本之前,请先阅读我的要求

我正在开发一个应用程序,它基本上有一个大约5000个团队的列表。这些团队是相当静态的(他们不经常改变)。我想观察任何时候一个被改变,虽然这是必要的,它得到的应用程序尽快更新

如果我包括
dbTeams.ref.observe(.childAdded,with:{})
,它将在每次应用程序启动时运行,加载所有5000条记录,尽管它们已经在持久性存储中(我已经启用了持久性)

现在文件上说这会发生,我知道,但是有5000条记录(将来可能会更多),我不能让这种情况发生

到目前为止,我的选择(与我所发现和尝试的不同)是:

  • 为每个记录添加一个时间戳,并创建一个自定义查询,以便在最后一个时间戳之后调用
    .childAdded
    。。。这是低效的。为足球队存储一个几乎不会改变的时间戳是愚蠢的。这还意味着保留上次检查的副本
  • 团队
    列表中创建子列表。这也很愚蠢,因为您可以调用
    .value
    ,一次就获得全部数据
  • 接受它吧。。。很好-直到它扩展到数万条记录。也不聪明
  • 除了这一个,所有其他事件侦听器只有在“应该”时才会启动,这似乎很奇怪


    任何帮助都将不胜感激-我如何实现我所需要的?

    childAdded事件会在应该的时候启动。它应该首先为每个子节点触发一次,然后在任何时候添加子节点。不清楚您的预期结果是什么,老实说,5000条记录可能不是一大堆数据,这取决于您的结构(这也应该包括在问题中)。显然,100k可能太多了,但这是由查询定义的;例如query(开始于:tenDaysAgo)。queryEndingAt(今天)只会加载从10天前到今天的子笔记。感谢@Jay的回复。我想观察任何时候添加新团队的情况,但我不想每次启动应用程序时都浏览每个团队。正如你所建议的,正如我在问题中所说的,基于时间的查询很好,但我无法检查查询的时间长度……什么定义了什么是新的,什么不是?如果一支球队是昨天加入的,那是一支新球队还是一支旧球队,因为它是昨天加入的。启动应用程序时,您根本不想加载任何团队,只想显示从那时起添加的团队?@Jay新团队是当前未存储在本地(持久)firebase db上的团队。。。因此,一周前可以添加一个团队,但该应用程序在两周前运行,因此没有同步新团队。所以我更希望.childAdded只运行一次——对于新团队来说。我认为这不是Firebase的好用例。虽然它提供离线持久性(用于断开连接等),但它实际上是一个在线、实时、事件驱动的NoSQL数据库。通过尝试让一些东西离线,一些东西在线,我不认为它会像你期望的那样工作,维护它将是一场噩梦。在这种情况下,您可能已经遇到了这种情况。然而,我可能完全错了。。。也许Firebaser可以提供一些关于这件事的见解和想法。childAdded事件会在应该的时候触发。它应该首先为每个子节点触发一次,然后在任何时候添加子节点。不清楚您的预期结果是什么,老实说,5000条记录可能不是一大堆数据,这取决于您的结构(这也应该包括在问题中)。显然,100k可能太多了,但这是由查询定义的;例如query(开始于:tenDaysAgo)。queryEndingAt(今天)只会加载从10天前到今天的子笔记。感谢@Jay的回复。我想观察任何时候添加新团队的情况,但我不想每次启动应用程序时都浏览每个团队。正如你所建议的,正如我在问题中所说的,基于时间的查询很好,但我无法检查查询的时间长度……什么定义了什么是新的,什么不是?如果一支球队是昨天加入的,那是一支新球队还是一支旧球队,因为它是昨天加入的。启动应用程序时,您根本不想加载任何团队,只想显示从那时起添加的团队?@Jay新团队是当前未存储在本地(持久)firebase db上的团队。。。因此,一周前可以添加一个团队,但该应用程序在两周前运行,因此没有同步新团队。所以我更希望.childAdded只运行一次——对于新团队来说。我认为这不是Firebase的好用例。虽然它提供离线持久性(用于断开连接等),但它实际上是一个在线、实时、事件驱动的NoSQL数据库。通过尝试让一些东西离线,一些东西在线,我不认为它会像你期望的那样工作,维护它将是一场噩梦。在这种情况下,您可能已经遇到了这种情况。然而,我可能完全错了。。。也许Firebaser可以提供一些关于这件事的见解和想法。