我们正在使用 firebase 实时数据库为连接到 facebook 的用户保存每个级别的分数。我们仍在测试此功能,一切正常,但下载使用率确实很高。每次该用户打开该应用程序时,我都会下载非常少量的数据,大约 20 个字节,并且为他开始的每个级别额外下载 5 个字节。几分钟后,下载使用量开始显示超过 100kB,这是一个很大的数字,当我们将其发布给我们的用户时,不会在财务上扩展。这是我们正在使用的数据结构:
users{
facebook_id{
"firebase_id" : firebaseId,
"max_level" : maxLevel,
"stars" : numberOfStars,
"scores" : {
level : score,
}
}
}
我还做了一些 CLI 数据库分析,有 0 个非索引查询,使用似乎是正确的。 这是屏幕截图。
有谁知道哪里出了问题?如果这只是 SSL 开销(看起来仍然太大),请注意除了设置我们自己的服务器之外我们还可以做其他事情。
最佳答案
方法一:长数据单独存放
- 如果这是数据结构
- 每次用户检查他的最高级别时,都会调用每个级别的基础分数。
- 通过将求和结果拆分到单独的路径中来避免这种情况
坏方法
users{
facebook_id{
"firebase_id" : firebaseId,
"max_level" : maxLevel,
"stars" : numberOfStars,
"scores" : {
level : score,
}
}
}
更好的方法-拆分为用户详细信息和用户分数详细信息
用户详细信息
Contains only max level and number of stars
users{
facebook_id{
"firebase_id" : firebaseId,
"max_level" : maxLevel,
"stars" : numberOfStars
}
}
用户分数详情
- 在单独的路径中包含关卡分数
- 客户端可以查看
users_scores/facebook_id/scores/<levelname>
存在?如果存在,获取分数
users_scores{
facebook_id{
"scores" : {
level1 : score1
},
{
level2 : score2
}
}
}
- 使用云函数计算星星总数 或者
- 不推荐:通过阅读
stars
来计算客户部分中的总星数来自users
路径,而不是通过users_scores
.只需更新路径users_scores/facebook_id/scores/<levelname>
来自客户本身
要点
- 而不是在每个获取请求中读取所有星星
- 获取最后更新的星星,并将新的星星更新到它。
- 通过仅访问单个路径更新特定级别的星级
- 这将是第一次为空,如果他已经完成该级别,它将包含值。
关于facebook - Firebase 实时数据库下载使用率高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43762756/