有没有一种方法可以阻止Firebase Realtime Database下载JSON项目名称?

时间:2019-05-25 16:09:29

标签: json database firebase-realtime-database

基本上,我有一个排行榜,显示前50名球员的得分。按照Firebase的最佳实践准则,我将数据展平,并将排行榜分数与玩家数据分开存储。但是,数据下载比我预期的要高(50个分数为3.62kb)。这是其中一个分数条目的示例。

    "wgstgJIaVcbdOFvTLIk0VyhO77" : {
      "display_name" : "FakeName7",
      "high_score" : 4
    },

我认为数据使用量来自用户ID(wgstgJIaVcbdOFvTLIk0VyhO77),实际上并不需要下载此数据,但我需要将其保存在此,因为我在安全规则中使用了它,只允许您更新分数。另外显示名称不是唯一的,所以我不能将其用作键。

我知道使用较短的键名(display_name-> n)也会有所帮助。

  Path         │ Total   │ Count │ Average │
├──────────────┼─────────┼───────┼─────────┤
│ /leaderboard │ 3.62 kB │ 1     │ 3.62 kB

2 个答案:

答案 0 :(得分:1)

Firebase的API响应为JSON格式(正如您最初的问题明确指出的那样),提供键和值是JSON规范的一部分。从理论上讲,有一种BJSON格式(二进制JSON),可以在传输和存储时节省大量空间,但是您无法控制Firebase API使用的格式。

  • 您唯一的选择是缩短键名,而我强烈 建议您在尝试缩短某些属性值时要小心, 例如说用户ID值(例如,尝试实现整数 ID等),因为这可能会带来安全隐患。
  • 要考虑的另一件事-如果您碰巧具有UTF-8代码点(非拉丁语) 数据中的字符),它们将以JSON和 它们的编码表示将占用更多空间。
  • 如果您需要更多“紧凑” API响应,则应考虑不同 RESTful API的后端实现。请记住,Firebase有很多限制。容易上手,很难实施更复杂的数据检索逻辑。

最后但并非最不重要的一点是-即使连接速度较慢,也能获得50分的3.62kb的声音。问问自己,是否值得花太多时间进行微优化。

答案 1 :(得分:0)

没有API可以仅获取多个节点的值的列表,而无需获取相应的键。

您唯一可以考虑的是对子节点("wgstgJIaVcbdOFvTLIk0VyhO77“)和属性名称("display_name""high_score")使用较短的键。