【问题标题】:MongoDB + wiredTiger + compression - is compression done on client or server?MongoDB + WiredTiger + 压缩 - 是在客户端还是服务器上进行压缩?
【发布时间】:2014-12-15 23:56:39
【问题描述】:

MongoDB 2.8-rc0 支持通过 wiredtiger 存储引擎进行压缩,如release notes 中所述。

我的问题是:数据是在客户端级别的 API 中压缩还是在服务器上压缩?基本上我想知道启用压缩是否会降低网络上的带宽需求(以及作为如果我的服务器和客户端位于不同的主机上,副作用会增加吞吐量并减少延迟)。或者这是否等同于在具有透明压缩的磁盘上运行旧的 mmap 存储引擎,例如 in this jira 所讨论的?

有一些关于新存储引擎here 的信息,但我对 mongoDB 没有太多经验,我正在寻找已经尝试过这个的人的反馈。

【问题讨论】:

  • 正如所说的不,但是,有不同形式的压缩可能会影响性能,快速压缩的设计正是如此,对性能几乎没有明显的影响,像 gzip 这样更高级的东西可能有效果
  • 仅供参考,您可以在 MongoDB 问题跟踪器中观看/点赞:SERVER-3018: Compression of wire protocol。有线协议的任何更改(例如协商压缩)也需要更新驱动程序。
  • 注意:如果您的客户端应用程序通过 SSH 隧道或 VPN 连接到您的 MongoDB 服务器,您可以在网络层启用压缩。压缩会增加一些 CPU 开销,这通常不是 MongoDB 的资源限制,但可能会对您的应用程序服务器产生更明显的影响。

标签: mongodb


【解决方案1】:

这不是 StackOerflow 的真正主题,因此确实需要迁移。我确信他们会在被标记为这样的时候得到一些东西。

MongoDB 2.8 中包含的 WiredTiger(撰写时为候选版本)是默认基本“mmap”解决方案的替代存储引擎机制,该解决方案在此版本之前一直是最新的。

这里的“简短”回答基本上是“压缩”由服务器处理,这主要是为了解决许多担忧,即以前版本的 MongoDB 的数据存储格式已经相当过度。

为了与“客户端”和“服务器”(主机之间的意思)之间的“压缩”功能相关,现有协议使用 BSON 通过电汇传输(可选地通过 SSL 加密),但更改不允许“通过电汇” " 无需外部实用程序的压缩。

因此,包含 WiredTiger 存储引擎的部分意义在于减少文件存储大小,而不是真正的网络传输。

【讨论】:

  • 我想正如他们所说的那样,WT 是一种“替代品”,为此,客户端 API 不会以任何方式进行修改。因此,所有的变化都在所谓的“存储引擎”中。真可惜,因为在电线上压缩东西不会花费您额外的费用!
  • @Luciano 与许多其他协议相比,有线协议已经相对“轻量”了。它是一种二进制形式,而不是更容易响应压缩的 HTML 或 JSON 文本。权衡是压缩/解压缩时间与有效负载的减少。目前还没有,因为主要关注的是使用默认遗留引擎的 MongoDB 数据库的数据文件大小。如果您有大型“有线”有效负载,那么您可能需要重新考虑您的方法。也许在客户端上积累数据。比这个问题更广泛的问题。
  • 谢谢;我想我有一个非常具体的用例:压缩时间序列数据。对快速压缩(例如 lz4)有一些兴趣,它通常可以both减少您的有效负载和实际数据集的挂墙时间。例如:youtube.com/watch?v=IzqlWUTndTo
  • @Luciano 就像我说的。您的问题不包括您真正要问的内容。将HVDF 视为参考项目,如果您需要更多关于概念的说明,请随时在此处提出更具体的问题。这意味着发布另一个问题而不是继续发布 cmets。顺便说一句,您在这里有足够的声誉来支持有用的回复。这里的回应是不客气,说声谢谢。
  • @NeilLunn 有线协议对消息使用 BSON,这与存储在服务器上的文档格式相同。它同样可压缩;-)。
【解决方案2】:

由于压缩是存储引擎的一项功能,因此压缩发生在服务器端,因此不会降低带宽需求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多