配置 mongodb node.js 驱动程序以使用 snappy 压缩

Tho*_*sch 3 compression mongodb node.js snappy

我们最近将 MongoDB 副本集升级到了 v3.4.4;我注意到这个版本现在支持与 snappy 的压缩网络通信。我已经将集合成员设置为启用此功能,以便它们以这种方式相互通信,并且 mongo shell 似乎原生支持它,但我找不到任何有关如何设置 Node.js 客户端的文档使用它。

当然,一切仍然工作正常,因为在客户端和服务器无法就压缩协议达成一致的情况下使用未压缩的通信,但出于明显的原因能够利用这一点将是很好的。

有其他人玩过这个或者有运气吗?

看来 Mongo 在这方面确实有一张开放的票,但想知道是否还有其他人在此之外取得了任何进展。

Man*_*uel 5

您有两个选项来启用压缩:

1) 驱动选项

初始化 MongoClient 时设置驱动程序选项。根据驱动程序的不同,语法可能有所不同。请参阅文档,例如:

"options": {
    "compression": [
        "zstd",
        "snappy",
        "zlib"
    ]
}
Run Code Online (Sandbox Code Playgroud)

2) 连接字符串

compressors参数添加到连接字符串中,例如:

mongodb://example.com/?compressors=zstd,snappy,zlib

笔记

  • 上面的示例演示了如何设置多个压缩器以更好地解释语法并使答案更有用。如果您只想设置一台压缩机,请进行相应更改。

  • 您可以在 mongoDB Node.js 驱动程序测试脚本中找到有关如何设置压缩器的更多示例。

  • 您可以验证是否开始使用网络压缩以及 mongo 日志中使用哪种压缩算法,因为每次压缩/解压缩都会生成一个详细的日志条目。或者您可以运行db.serverStatus()['network']并观察各种压缩器的 bytesIn / bytesOut,例如:

    {
        "bytesIn" : NumberLong("1828061251"),
        "bytesOut" : NumberLong("57900955809"),
        "physicalBytesIn" : NumberLong("2720120753"),
        "physicalBytesOut" : NumberLong("32071382239"),
        "numRequests" : NumberLong("570858"),
        "compression" : {
            "snappy" : {
                "compressor" : {
                    "bytesIn" : NumberLong("2215000774"),
                    "bytesOut" : NumberLong("752759260")
                },
                "decompressor" : {
                    "bytesIn" : NumberLong("226402961"),
                    "bytesOut" : NumberLong("848171447")
                }
            }
        },
        "serviceExecutorTaskStats" : {
            "executor" : "passthrough",
            "threadsRunning" : 80
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)