是否有支持线程压缩的MongoDB驱动程序?

时间:2017-04-24 00:52:58

标签: java mongodb compression

可以使用此选项运行MongoDB:--networkMessageCompressors=snappy。根据文档,这压缩了mongod,mongos和mongo shell之间的网络交换。

我想压缩Java应用程序和mongod之间的流量,但没有一个Java驱动程序提供此选项。

有没有人尝试过以下路径之一?

  • 修补Java驱动程序以便它支持压缩(当然这将是我首选的解决方案,但我可以在指示上使用一些建议)
  • 包装另一个支持压缩的驱动程序,以将其暴露给Java应用程序(但我不知道是否有任何其他驱动程序支持此功能)

当然,任何其他可以帮助我压缩有效载荷的方法都会受到高度赞赏。

提前致谢!

1 个答案:

答案 0 :(得分:3)

正如您所指出的,MongoDB 3.4中添加的network compression feature目前仅支持副本集或分片群集成员之间的群集内通信(mongod或{{1} }以及mongos shell。截至MongoDB 3.4版本,没有支持网络压缩的官方驱动程序。

您可以在MongoDB问题跟踪器中观看/提升相关功能请求,以获取客户端/驱动程序支持:SERVER-25620: Compression of wire protocol for Clients。此功能请求还提供了一些注释,提供了一些context on the lack of client support

  

对于某些背景,在MongoDB 3.4开发周期中,实施有线协议压缩的决定来得非常晚。我们同意客户能够利用该功能是有益的,但是对于MongoDB 3.4这样做会要求所有官方的MongoDB驱动程序也添加支持,并且这看起来并不现实时间表。此外,通过仅保持有线协议压缩集群内部,它将为我们提供一些能力,在我们向客户端打开它之前优化该功能并有效地锁定到设计中。我们将评估是否在MongoDB 3.6开发期间将压缩支持扩展到客户端。

如果您的用例有重大胜利,您可以考虑为Java驱动程序实现补丁,但是在3.6开发周期中可能会发生变化,等待官方驱动程序支持可能更为谨慎。

  

当然,任何其他可以帮助我压缩有效载荷的方法都会受到高度赞赏。

您可以使用VPN或TLS / SSL压缩来利用网络压缩,而不是修改驱动程序。 VPN压缩可能是更值得推荐的方法。

TLS / SSL压缩取决于许多因素,包括您的TLS / SSL库是在默认情况下启用压缩还是禁用的情况下构建的。由于CRIME这样的高调安全漏洞,许多O / S发行版和语言/驱动程序已禁用TLS / SSL压缩。虽然MongoDB理论上不容易受到CRIME攻击(针对经过身份验证的Web会话)的攻击,但许多用户认为TLS压缩是一个安全问题。