Firebase在大型列表上编制索引(100000多个项目)

时间:2014-12-07 16:43:02

标签: firebase rest-firebase

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

1 个答案:

答案 0 :(得分:2)

路径中的记录数量不会成为问题; 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'