Android Firebase:查询单个对象非常慢

时间:2018-08-01 10:04:47

标签: android firebase firebase-realtime-database xamarin.android geofire

我需要你的帮助!

我正在创建一个Android应用,该应用在列表中和地图上显示有关用户实际位置的对象。 我使用GeoFire和Firebase。 在Firebase中,差不多存储了15,000个对象:

{
  "01_001_00001" : { .... },
  "01_001_00002" : { .... },
...........
  "18_026_00078" : { .... }
}

首先,我以纬度/经度运行GeoFire,该操作会返回对象ID列表。

然后,我查询Firebase以获取与ID对应的对象。

这很好,但是速度很慢...

从对象的ID查询对象所需的时间取决于数据库中的订单位置!在我看来,这太疯狂了。 (SQL为赢)。

这是GeoFire返回新对象Key时触发的代码:

    public void onKeyEntered(string key, GeoLocation location)
    {
         Console.WriteLine("TODEBUG new GeoFire key : " + key);                
         m_DBRefActivite.Child(key).AddListenerForSingleValueEvent(m_activityValueListener);
    }

这是Firebase返回与先前查询的ID相对应的新Object时执行的代码:

public void HandleActivityValueEventListenerOnChanged(object sender, EventArgs args)
{
    Activite newAct = ((ActivityEventArgs)args)?.value;

    if (newAct != null)
    {
        Console.WriteLine("TODEBUG new Firebase object : " + newAct.activite_ID);

        //Insert in the list
        m_lsActivities.Add(newAct);
    }
}

这段代码给出了一个奇怪的结果:当我查询一个数据库中第一个位置附近的对象(按键排序)时,请求很快:200ms

当我查询数据库中居中位置附近的对象(按键排序)时,请求需要5秒钟。

如果我查询数据库中最后一个对象附近的对象(按键排序),则请求需要10秒...

以下是日志(已清理并带有我自己的注释来解释我的问题):

//Query object ID = 01_026_00199 : 200ms

08-01 10:47:44.582 I/mono-stdout(30118): TODEBUG new GeoFire key : 01_026_00199

08-01 10:47:44.772 I/mono-stdout(30118): TODEBUG  new Firebase object : 01_026_00199





//Query object ID = 09_003_00116 : 5sec

08-01 10:49:37.900 I/mono-stdout(30118): TODEBUG new GeoFire key : 09_003_00116

08-01 10:49:43.093 I/mono-stdout(30118): TODEBUG  new Firebase object : 09_003_00116




//Query object ID = 18_026_00022 : 10sec

08-01 10:44:15.634 I/mono-stdout(30118): TODEBUG new GeoFire key : 18_026_00022

08-01 10:44:25.857 I/mono-stdout(30118): TODEBUG  new Firebase object : 18_026_00022

有什么优化我的代码的想法吗?不论ID如何,如何在200ms内获取对象?

0 个答案:

没有答案