【问题标题】:How to correct add an index on firebase realtime rules如何更正在 Firebase 实时规则上添加索引
【发布时间】:2019-06-14 04:25:49
【问题描述】:

大家好,我一直在尝试为这个特定结构添加特定索引:

但事实是,在我阅读了来自 here 的文档之后,我仍然无法找到一种方法来完成将索引添加到 /c000000001_talks 和 c000000002_talks 等处的“uid_to”的任务.

只是为了理解这个 c000000001_ 是租户的前缀,所以每个租户在表上都有自己的前缀。

我已经看到 firebase 建议创建两个级别,例如 tenant\c000000001\talks 租户\c000000001\成员

但是这种结构已经存在,并且在生产中我们无法再更改它。

【问题讨论】:

  • 为什么要添加索引?通常,当推荐索引时,您可以在 firebase 函数日志中看到抱怨/建议,只需检查日志并查看需要优化数据库的位置。另外,我一直在对子值使用索引,而不是父 UID,但我在上面的结构中看不到一个
  • 嗨@Mocas我正在尝试只是因为firebase在抱怨它,每个租户都在同一张桌子上。这是他的抱怨之一:@firebase/database: FIREBASE WARNING: Using an unspecified index。您的数据将在客户端下载和过滤。考虑将 /c000000002_talks 中的 ".indexOn": "uid_to" 添加到您的安全规则中以获得更好的性能。

标签: javascript firebase firebase-realtime-database firebase-security


【解决方案1】:

您可能没有将索引放在规则的正确分支上

试试这个:

RED-CROSSED_PARENT:
                  {
                   "$talksID": 
                              {
                               ".indexOn": "uid_to"
                               }
                  }

因为您的谈话是相同的结构,理想情况下您会将它们放在同一个父“谈话”下,因此“indexOn”仅适用于谈话孩子

RED-CROSSED_PARENT:
                  {
                  Talks:{
                         "$talksID": 
                                   {
                                   ".indexOn": "uid_to"
                                   }
                        }
                   }

我假设您知道如何获取数据库中的规则

【讨论】:

  • 问题是这个提示也适用于c000000003_talks,c000000004_talks,然后继续,这样我已经完成并且它有效。但是随着新客户的订阅,我们必须手动添加新索引...
  • 嘿@Mocas 我已经用第一种方法进行了测试,它似乎有效。对其他租户进行良好测试以确认。
  • 是的,只需添加规则即可:"$talksId": { ".indexOn": ["uid_to"] }
  • 我只怕在同一个级别我们还有其他的表,比如 c000000003_connected_users, c000000003_members ...
猜你喜欢
  • 2018-06-10
  • 2016-12-29
  • 1970-01-01
  • 2021-02-17
  • 2018-07-03
  • 2021-12-18
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
相关资源
最近更新 更多