我在我的mongos上看到了一种行为,当事情在我的一个分片上排队时,C#驱动程序SendMessage需要花费更长的时间,并且mongos必须将调用转发到那个分片。SendMessage不应该独立于分片的繁忙程度吗?我应该能够根据我的网络连接速度而不是分片的繁忙程度对数据进行排队?
发布于 2012-02-29 07:19:03
SendMessage不应该独立于分片的繁忙程度,我应该能够根据我的网络连接速度而不是分片的繁忙程度来排队吗?
MongoDB不使用缓冲区,但操作系统/网络堆栈有一个缓冲区,用于所有网络流量(通过套接字/连接)。
您真正谈论的是分片服务器的网络缓冲区。你在说“嘿,如果你很忙也没关系,就接受这个请求吧”。但是,网络缓冲区并不是无限长的。在某些时候,缓冲区将是满的,该连接将简单地停止接受更多的数据,直到它被清除。
如果您所发送的操作/数据超过了单个分片所能处理的数量,那么您的选择是有限的:
不幸的是,这些都不是简单的解决方案。MongoDB的伟大之处在于它提供了共享数据的能力。但它没有自动处理“热”节点的功能。如果知道哪些块是热的,那么你可以拆分它们,平衡器会移动它们,但如果块中的数据没有变化,就没有自动过程为你做这件事。
https://stackoverflow.com/questions/9490390
复制相似问题