根据日期将数据存储在firebase中以优化查询?

时间:2017-02-20 13:53:19

标签: javascript firebase firebase-realtime-database

我的应用允许用户向firebase提交一些数据条目。最初,我的数据集看起来像

-forms
    -company1
        -approvedForms
            -$key
                -name: 'John Doe'
                -date_epoch: 1487590100
            -$key2
                -name: 'Taylor Smith'
                -date_epoch: 1487590101
            -$key3
                -name: 'Sam Cesky'
                -date_epoch: 1487590102

我有一个页面,用户可以输入开始和结束日期来搜索日期范围内的数据。 我如何做它是标准的firebase方式,我将搜索开始和停止日期转换为纪元号然后调用以下函数

 return ref.child('forms')
   .child(companyId)
   .child('approvedForms')
   .orderByChild('date_epoch')
   .startAt(startDateEpoch)
   .endAt(endDateEpoch)
   .once('value')

这一切都很好!然而,我开始怀疑......在10年之后说,我可能会在批准的表格下有一个巨大的名单。 为了论证,如果我搜索2020年1月31日到2020年2月1日的日期,我将强制firebase查看这2天查询的所有条目

所以我想到了另一个想法,即保存条目类似于以下我添加额外年/月的条目。请注意,月份和年份是从日期

生成的
-forms
    -company1
        -approvedForms
            -2017
                -1
                    -$key
                        -name: 'John Doe'
                        -date_epoch: 1483228800
                    -$key2
                        -name: 'Taylor Smith'
                        -date_epoch: 1483228801
                -2
                    -$key3
                        -name: 'Sam Cesky'
                        -date_epoch: 1485907200

在这种情况下,我可以通过查看分支来查询数据,例如forms / company1 / approvedForms / 2017/1

问题是,由于以下原因,这是一个非常尴尬的解决方案

  1. 如果说要从2017年2月到2018年1月份搜索,我将需要为每个月节点创建11个个人获取请求...
  2. 我需要创建一些复杂的算法,以生成11条路径来检查我是否过了一年
  3. 所以问题是,我是否会更好地坚持使用原始方法,因为firebase旨在为一个节点中的大型数据集做到这一点? 或者对整个问题有更好的解决方法吗?

0 个答案:

没有答案