繁体   English   中英

性能明智; (单个事件侦听器)或(查询)firebase?

[英]Performance wise; (single event listener) or (query) for firebase?

如果我知道确切的节点路径,使用 (addSingleEventListener) 或 (query) 检索单个条目是否更好。

我有一个包含 10,000 多个用户的“X”节点……每个用户有 60 个以上的“Y”子节点,每个子节点包含 3 个“Z”节点(10,000 X -> 60 Y -> 3 Z)

现在我使用下面的 java 代码不断检索 Z 节点 .. 但我在真正的 android 设备上面临性能缓慢和 outOfMemory 崩溃.. 我在想也许“query.equalTo()”可能会更快..任何提高性能的想法

dbRootRef.child("X").child("Y").child("Z")
          .addListenerForSingleValueEvent(new ValueEventListener(){ ... });   

编辑

谢谢大家的时间,但是我想澄清一下:

  • 我知道通过侦听器查询和读取数据是不同的过程,但无论进程的名称如何,我都需要有效地检索数据。

  • 我的问题有点笼统,我正在寻找的是一种通用的适应方式,可以在数据库变大时从数据库中检索数据。

从 Firebase 数据库读取数据时,大部分时间将用于实际下载该数据。 与此相比,服务器查找数据所需的时间通常很少。

这意味着检索相同数据的两种方法可能会为您提供相似的性能。 鉴于此,我会选择最易读的那个。 如果您知道确切路径,则使用您共享的代码片段中的确切路径。 该代码片段可能会稍微短一些:

dbRootRef.child("X/Y/Z")
      .addListenerForSingleValueEvent(new ValueEventListener(){ ... })

但是这种变化也不会有任何明显的性能差异,因为它再次检索相同的信息。


更大的性能差异在于您是使用addListenerForSingleValueEvent还是addValueEventListener 如果您对同一数据多次使用addListenerForSingleValueEvent ,则您(可能,这取决于其他因素)多次读取该数据。 如果您随后不仔细清理对该数据的本地引用,您很容易在内存中多次获得相同的数据。

这就是为什么如果您长时间需要数据,建议使用addValueEventListener的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM