1

我正在将我的关系数据库迁移到 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 是否能够仅使用索引来处理这个问题?

4

1 回答 1

2

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

请务必阅读“.indexOn”并在您的安全规则中实现这一点:

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

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

curl -X GET 'https://myapp.firebaseio.com/appointments.json?orderBy="date"&equalsTo="20141207"&limitToFirst=100'
于 2014-12-19T19:38:42.377 回答