json - 有没有办法阻止 Firebase 实时数据库下载 JSON 项目名称?
问题描述
基本上我有一个显示前 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
如果有人有更好的方法来构建这种类型的数据,我会全力以赴。
解决方案
Firebase 的 API 响应采用 JSON 格式(正如您最初的问题明确指出的那样),提供键和值是 JSON 规范的一部分。理论上,有一种 BJSON 格式(二进制 JSON),它可以在传输和存储中节省大量空间,但您无法控制 Firebase 的 API 使用什么格式。
- 您唯一的选择是缩短键名,但我强烈 建议您在尝试缩短某些属性值时要小心,例如,用户 ID 值(例如尝试实现整数 ID 等),因为这可能有安全影响。
- 要考虑的另一件事 - 如果您的数据值中碰巧有 UTF-8 代码点(非拉丁字符),它们将被编码为 JSON,并且它们的编码表示将占用更多空间。
- 如果您需要更“紧凑”的 API 响应,您应该考虑使用 RESTful API 实现不同的后端。请记住,Firebase 有很多限制。容易上手,很难实现更复杂的数据检索逻辑。
最后但并非最不重要的一点 - 50 分的 3.62kb 即使在连接速度较慢的情况下也相当不错。问问自己是否值得花太多时间进行微优化。
推荐阅读
- sql-server - 跳过一个条目 WHERE ROW_NUMBER() = X 和相应的条目 = 'Y'
- java - 正则表达式:字符串必须包含单词序列
- hazelcast-jet - HazelcastJet kafka 节流
- docker - 使用 Azure CLI 基础进行身份验证的自定义 Docker 映像
- python - Is it possible to add a postgresql trigger to notify my Django app when a table changes?
- azure-sql-database - 创建 Azure IR 时出错:检查链接服务配置是否正确
- c# - 使用 LDAPS 身份验证时出现 LDAP 服务器不可用错误
- azure-devops - Azure DevOps Pipeline - 发布 API - 更新发布定义添加和删除模板化阶段
- node.js - 从服务器下载 Flutter pdf
- python - Print index of row and column in adjacency matrix