【问题标题】:Queries in Realtime-database (using LimitToLast) are very very slow实时数据库中的查询(使用 LimitToLast)非常慢
【发布时间】:2019-10-01 16:49:26
【问题描述】:

我正在使用RealTime-database(Firebase 7.3.2) 和Unity

当我使用LimitToLast() 方法时,查询需要很长时间(1.5 到 2 分钟)才能返回响应。

但是当我加载整个数据或在没有LimitToLast 方法的情况下执行此查询时,这不会花费很长时间。

我想问一下大家在开发实时firebase数据库的过程中是否有这个问题。

我的数据库包含 1700 个房间。

这是查询:

var result = await FirebaseDatabase.DefaultInstance.GetReference("Rooms")
    .OrderByChild("CreationDate").LimitToLast(10).GetValueAsync();

这就是数据库中房间集合的结构:

{
  "Rooms" : {
    "-Lp860kFH8TjdAsPpar1" : {
      "CreationDate" : -14400,
      "Title" : "Room 1",
      ...,
    },
    "-Lp860kFH8TjdAsPpbr2" : {
      "CreationDate" : -14402,
      "Title" : "Room 2",
      ...,
    },
    ...
    "-Lp860kFH8TjdAsPpar3" : {
      "CreationDate" : -14404,
      "Title" : "Room 1700",
      ...,
    }
  }
}

【问题讨论】:

  • 你确定这是因为LimitToLast 而不是因为OrderByChild("CreationDate") 吗?
  • 是的,我确定这是因为 LimitToLast。我试图从查询中删除 OrderByChild("CreationDate") 并保留 LimitToLast ,这需要很长时间才能执行。 :(

标签: firebase unity3d firebase-realtime-database


【解决方案1】:

您确定在您的Firebase Realtime Database Security Rules 中完成了索引吗?如果未完成,则按如下方式执行查询: 1. 将“Rooms”分支中的所有数据下载到 Unity 客户端。 2. 根据您在 Unity 客户端上的排序标准对数据进行排序。 3. 丢弃此排序数据中除了最后 10 个孩子之外的所有孩子。

如果您只想获得最后 10 个孩子,我敢肯定没有人愿意这样做。排序和限制到最后 10 个孩子应该发生在数据库服务器本身上 这将确保它足够快,可以在几毫秒内为您提供结果。为此,您必须 index your data 然后运行您的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2023-03-19
    相关资源
    最近更新 更多