【问题标题】:Saving firebase bandwidth by shortening field names?通过缩短字段名称来节省 Firebase 带宽?
【发布时间】:2014-01-16 06:59:38
【问题描述】:

使用 Firebase,我为字段提供易于阅读的名称,例如“timestamp”、“last_changed”、“message_direction”等。

字段名称是每个“行”数据交换的一部分吗?

意思是,我会通过缩短字段名称来节省带宽吗?

【问题讨论】:

  • 您可能会节省一些带宽,但我怀疑这是否值得失去可读性。如果您想查看 Firebase 发送/接收的内容,请在脚本的早期设置 Firebase.enableLogging(true);。您还可以使用Firebase.INTERNAL.stats(firebaseRef); 获得数据大小的指示。 (见stackoverflow.com/a/18922268/209103stackoverflow.com/a/25025571/209103

标签: firebase


【解决方案1】:

正如弗兰克指出的那样:是的,它们确实会影响带宽。但是,如果您算一算,您会发现带宽很少值得付出努力和混淆,而且通常您的数据负载会大大掩盖键的几个额外字符。

让我们考虑一条普通的聊天消息:

{
  "sender": "typicaluserid:12345678901234567890",
  "timestamp": 1410193850266,
  "message": "Hello world. All your base are belong to us!"
}

好的,首先让我们看看这条消息的有效负载。这是 163 字节,UTF-8 编码。如果我将键更改为无意义的三个字符 id(例如 sdr、ts 和 msg),那么它将是 149 个字节。对事务开销进行一些宽松的填充,比如说大约 40 个字节,这大约节省了 2%,以换取需要一块罗塞塔石来读取我的数据。

接下来,让我们考虑带宽使用情况。如果我们有一个非常活跃、非常庞大的聊天系统(即我们正在赚取大量的美元),我们可能有 10,000 个活跃用户平均每天发送 50 条消息。这意味着我们将每天发送200 bytes * 500k = 100MB 的数据,或者每月发送大约3GB 的数据。

这意味着我可以在 Firebase 的免费计划中轻松支持大型聊天系统,而不会超出带宽限制。

如果我们去掉这 11 个字节,我们就有189 * 500k * 30 = 2.8GB。因此,努力并没有显着差异。

【讨论】:

  • 这个问题很老,所以这可能已经过时了,但您的计算不包括执行写入和读取所需的 HTTP 请求。同样,我在这里可能完全错了,但这将包括每条消息额外的 ~400-600 字节。是这样吗?
  • 不通过 websockets,这是默认设置。但是每个数据包当然会有一点开销。
  • 写得好。赞成。数据是否被压缩? (stackoverflow.com/questions/41915854/…)
  • 罗塞塔石碑让我大笑起来:'D帮了我很多,谢谢:)惊人的答案。是的,不值得头疼
  • @Kato 访问深度嵌套的布尔值和一级布尔值消耗的带宽是否相当可观?例如:我有一条类似users/chats/events/random_id_dfdfdddffdfdfsffsdfdffszfdf/isOnline/ 的路径,我正在考虑将其转换为更扁平的结构,例如online/uid 这会节省大量带宽吗?我平均每天为用户访问这条路径 100 次
【解决方案2】:

为了“横向思考”和“陈述显而易见”,我的几分钱:有时缩短除了带宽之外还有其他好处。例如可读性、易于输入、不太可能出现拼写错误等。

我建议花一些时间寻找仍然可以理解的最简洁的名称。

/ MrObvious out

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多