如何优化从服务器到客户端设置的Mongo查询结果的传输;也许是通过压缩



我正在编写一些Mongo查询,以在RAW JSON中每个数据约为12 kb。我希望在我编写的程序的启动时为我们的用户提供5000到150000个对象的任何地方。在我们的100Mbps LAN上,这需要一段时间 - 55秒,用于50000个对象,或6秒钟的5000个对象。这些对象不会改变,所以我可以在记忆中缓存它们。但是最初的查询时间是不可接受的。我已经使用Wireshark进行了验证,该网络实际上是导致瓶颈。不幸的是,要获取所有50000个对象的数据包,需要将近一分钟的时间。转换对象,供应序列化,索引等对我而言并没有引起问题。

我怀疑如果Mongo做的事情要首先压缩数据,将其发送给我,然后让我对客户端进行解压缩会更快。这是一种现实的怀疑吗?或者,还有其他方法可以加快大量查询结果集的传输吗?我尝试设置较高的批次,但没有帮助。

我的环境是窗户上的Python 3.6上的Pymongo。客户端计算机和服务器硬件规格足以处理(DE)压缩。我正在尝试避免一个解决方案,该解决方案会让我编写一个程序以在服务器上进行本地查询和压缩数据,然后再通过网络将其发送给客户端。

您的观察结果似乎很有意义。让我们做数学:

  5'000 * 12kb =  60MB
150'000 * 12kb = 1.8GB

100Mbps网络传输最大。750MB/min,这将导致4.8秒(5'000文档)和2m:24s(对于150'000),假设有原本空的电线。那是相当多的。

如果您没有选择升级到例如千兆以太网那仍然有希望:

mongodb v3.6带有协议压缩:https://ementysqua.re/blog/driver-features-for-mongodb-3-6/。它已于几天前发布。不过,您可能需要等待驾驶员可用。

另外,例如Cisco路由器支持压缩,这应该有所帮助,但显然需要硬件和智慧 - https://www.cisco.com/c/en/us/support/docs/docs/wan/data-compression/14156-compress-overress-overview.html

最新更新