【问题标题】:Is there a way to prevent Firebase Realtime Database from downloading JSON item names?有没有办法阻止 Firebase 实时数据库下载 JSON 项目名称?
【发布时间】:2019-10-11 21:04:29
【问题描述】:

基本上我有一个显示前 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

如果有人有更好的方法来构建此类数据,我会全力以赴。

【问题讨论】:

    标签: json database firebase-realtime-database


    【解决方案1】:

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

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

    【讨论】:

    • 嘿弗兰克感谢您的回复。正如我在原始问题末尾提到的那样,我已经减少了名称。此外,如果您再次阅读我的问题,我需要保留我的密钥名称,因为我将其用于安全性,以便只有用户可以写入他们的高分节点。有没有更好的方法来做到这一点?
    • 这留下了我答案的第一行:没有 API 可以获取仅包含多个节点的值的列表,而无需获取相应的键。
    【解决方案2】:

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

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

    最后但并非最不重要的一点 - 50 分的 3.62kb 即使在连接速度较慢的情况下也相当不错。问问自己是否值得花太多时间进行微优化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多