【问题标题】:Firebase indexing on huge lists (100000+ items)巨大列表上的 Firebase 索引(100000+ 项)
【发布时间】:2015-12-04 07:09:03
【问题描述】:

我正在将我的关系数据库迁移到 Firebase。一般来说,我有一个工人计划员。他们可以将项目(“约会”)添加到他们的日程安排中。我已经阅读了 FireBase 文档,并找到了关于索引的部分。

所以我创建了以下结构(日期 = YYYYMMDD 和时间 = HHMMSS):

{ 
     appointments : 
         'id1' : { 'date' : '20141207', 'time' : '170000', worker : 'worker1' },
         'id2' : { 'date' : '20141208', 'time' : '170000', worker : 'worker1' }
}

我为日期、时间和工作人员添加了一个索引,以便能够像这样查询数据(例如,获取今天的所有约会):

curl -X GET 'https://myapp.firebaseio.com/appointments.json?orderBy="date"&equalsTo="20141207"'

这按预期工作并且做得很好。问题是,约会的数量可以成倍增长(大约一年后,可能会有 100000 多个约会)。使用这些索引是一种好方法吗?另一种选择是单独存储日期和时间,如下所示:

{
    '20141207' : 
        { '170000' : { 'id1' : true } },
    '20141208' : 
        { '170000' : { 'id2' : true } }
}

为了确保每天可以非常快速地获取约会。或者 FireBase 是否能够仅使用索引来处理这个问题?

【问题讨论】:

  • 在这 10 万件商品中,一天会有多少件掉落?因为(如果您的应用一次显示一天)这是您必须下载的项目数。
  • 我估计每天大约 100 个。所以没关系。我只是想知道如果定义了索引,FireBase 是否可以毫无问题地处理大量(100000+)项中的 100 个项目。或者如果最好创建一个额外的路径(如下所示)来稍微修剪一下树。
  • 如果 Firebase 当前无法处理该索引查找,我希望他们会在您达到 100K 时修复它。 :-) 但是,如果您可以以不同的方式构建数据(例如,将一天中的所有项目放在同一个节点下),那么事情就在您自己的控制之下。
  • 为什么不使用时间戳作为优先级?它非常适合按日期范围查询。

标签: firebase rest-firebase


【解决方案1】:

路径中的记录数不是问题; Firebase 是一个可扩展的实时后端,可处理数十万个并发连接和数百万个节点。查询应该很快。这是索引的重点,并且与 Firebase 的所有内容一样,必须符合我们的速度和卓越标准。

请务必read about '.indexOn' 并在您的安全规则中执行此操作:

{
  "rules": {
     "appointments": {
        ".indexOn": ["date", "time", "worker"]
     }
  }
}

此外,您真正的限制是通过管道传输数据的带宽,因此请务必以某种方式限制您的结果并分页:

curl -X GET 'https://myapp.firebaseio.com/appointments.json?orderBy="date"&equalsTo="20141207"&limitToFirst=100'

【讨论】:

    猜你喜欢
    • 2017-12-04
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2013-10-19
    • 1970-01-01
    • 2010-12-06
    相关资源
    最近更新 更多