可以使用“规则”来提高Firebase数据库中的查询性能吗?

时间:2016-09-01 12:08:38

标签: firebase firebase-realtime-database

假设我有一本藏书“藏书”,里面有大量儿童。

(请这个例子是字典,所以不要专注于书籍的最佳解决方案)

现在,我知道我们可以/应该以这样的方式构建集合:每个用户都拥有他/她自己的集合,如下所示:

  • 书籍
    • userId1
      • BOOK1
      • 第二册
      • Book5两个
    • userId5
      • 第二册

但我想知道是否有如下所示的集合,使用“规则”允许用户只读取“阅读器”属性下列出用户ID的子项。

  • 书籍
    • BOOK1
      • 阅读器
        • userId1
        • userId2
        • userId4
    • 第二册
      • 阅读器
        • userId1
    • Book5两个
      • 阅读器
        • userId3

如果可以使用此规则,我们是否可以调用参考mDatabase.child(“books”)并只接收用户可以阅读的书籍而不是所有书籍?

1 个答案:

答案 0 :(得分:2)

不,这是不可能的,因为Firebase规则不会充当过滤器。如果您尝试在示例中请求所有图书,但阅读规则表明您无权访问其中一本图书,则用户根本无法请求图书,整个请求将失败。

处理此类事情的推荐方法是以不同方式列出您的读者列表。一个有效的结构将是这样的:

  • 书籍
    • book0
    • BOOK1
  • 读者
    • 用户0
        • book0
        • BOOK1
    • USER1
        • BOOK1

因为您知道用户的用户ID,所以查找用户很便宜。然后检查用户正在阅读哪些书籍也很便宜,因为用户对象中有这些书籍。如果您拥有用户正在阅读的图书的ID,您可以单独通过其ID获取这些图书,而无需请求整套图书。

在那种情况下,性能不再是问题。通过它在数组中的索引查找对象,或者它在对象中的键是相当便宜的。