Orl*_*ter 1 firebase firebase-realtime-database
我知道这是一个讨论度很高的话题,但对我来说,仍然不清楚哪种方法是在 Firebase 中创建高级查询的最佳方法。
目前,我在应用引擎的前端使用 Angular 2,后端使用 Firebase + NodeJS(Admin SDK)。
前端:身份验证/简单查询/写入非敏感数据
NodeJS:编写高敏感数据/验证
工作得很好!
但现在我想创建高级查询,这就是我挣扎的地方:
那么有没有什么好的方法可以避免传输未查询的数据呢?也许因为我无论如何都在使用 gcloud 作为管理 sdk?
我真的很想念自定义端点之类的东西。
提前谢谢!
Google 对“为什么不能进行高级查询”的回答 只是“重组您的数据,因此您无需进行高级查询”
这似乎是一个廉价的裁剪,但这个想法是因为 firebase 应该是实时的,它需要尽可能快地查询数据,并且可能没有足够的“时间”/“资源”来为高级查询提供服务. 从 google 的角度来看,这是有道理的,因为他们不能简单地将更多的服务器资源专供您使用。在谷歌看来,这很简单,“我们在您需要时为您提供所有数据,您的工作是使其保持一致,并随心所欲地使用它”
因此,您的 Node 后端必须充当服务器代理,从 Firebase 获取实际数据,并对这些数据进行高级查询,并将查询到的数据返回给客户端。或者,您可以使用无服务器并直接在客户端上执行此操作,但是正如您所提到的,对于那些高度敏感的数据,这可能并不总是安全的。
基本上,您无法避免未查询的数据,但可以将未查询的数据保持在最低限度。这可以通过重组您的数据来实现。
谷歌给你的建议是,
根据您的观点构建您的数据 - Firebase、Google
这意味着,假设有一个显示发票信息的视图。传统上,如果你来自 SQL,你会设计这样的东西
+ invoice
+ i01
+ date: xxx
+ customer: xxx
+ invoice_items
+ ii01
+ invoice: i01
+ product: p
+ qty: 1
...
Run Code Online (Sandbox Code Playgroud)
谷歌希望你做的是
+ invoice
+ i01
+ date: xxx
+ customer: xxx
+ items: [
{
+ product: p
+ qty: 1
}]
...
Run Code Online (Sandbox Code Playgroud)
这样,您就无需“需要”进行高级查询,因为您的视图所需的所有数据都已经存在。
这似乎是一种退步,因为如果您考虑一下,这只会导致数据库状态迟早会进入不一致的状态,而且您是对的,有时确实会这样做。但 Firebase 确实提供了应对措施,例如多路径更新。
希望这可以帮助 :)
| 归档时间: |
|
| 查看次数: |
1255 次 |
| 最近记录: |