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

时间:2017-12-09 06:15:06

标签: mongodb performance

我正在为原始JSON中的每个大约12 KB的数据片段编写一些Mongo查询。我希望在我写作的程序启动时为我们的用户抓取5000到150000这些对象。在我们的100Mbps局域网上,这需要一段时间 - 50000个对象约为55秒,5000个对象为6秒。对象不会改变,因此我可以在内存中对它们进行缓存。但是初始查询时间是不可接受的。我已经使用Wireshark验证了网络实际上是导致瓶颈的原因。不幸的是,获取所有50000个对象的数据包需要将近一分钟。转换对象,反序列化,索引等不会对我造成问题。

我怀疑如果Mongo首先压缩数据,发送给我,并让我在客户端解压缩它会更快。这是一个现实的怀疑,如果是这样,Mongo有没有任何设施可以做到这一点?或者,有没有其他方法来加速大型查询结果集的传输?我已经尝试将batch_size设置得更高,但它没有帮助。

我的环境是Windows上的Python 3.6上的PyMongo。客户端计算机和服务器硬件规格足以处理(解压缩)。我试图避免一种解决方案,让我编写一个程序来放置服务器,以便在通过网络将数据发送到客户端之前进行本地查询和压缩。

1 个答案:

答案 0 :(得分:1)

您的观察结果似乎确实有意义。我们来做数学:

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

100Mbps网络传输最大值假设其他空线,那么750MB /分钟就会产生4.8s(5'000个文件)和2m:24s(150'000)之间的差异。那是相当多的。

如果您无法升级到例如千兆以太网然后还有希望:

MongoDB v3.6附带协议压缩:https://emptysqua.re/blog/driver-features-for-mongodb-3-6/。它已在几天前发布。但是,您可能需要等待驱动程序可用。

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