我有一个Mongov2.6.4集群,其中包括:
通过应用服务器,我可以毫无问题地连接到集群。但是,每台服务器每秒只能查询1k (这是来自使用Java驱动程序的小型集合上的快速findOne )。在我的开发环境中,在一个小型vm上,我看到同一个测试应用程序每秒有超过4k的查询。
真正奇怪的是,如果我添加更多的应用服务器,我可以每秒从每个应用服务器获得大约1k个查询(也就是说,4个应用服务器每秒可以得到大约4k个查询)。这使我相信mongos设置有问题,它限制了查询性能。
我疯了吗?有什么方法可以提高芒戈斯的表现吗?
编辑1(添加示例代码和有关mongos配置的详细信息)
mongos配置是100%默认的,除了
configdb=server1,server2,server3
maxConns=10000在其中一个应用服务器上运行的快速测试代码
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;
class Tester {
public static void main (String[] args) {
try {
MongoClient mongoClient = new MongoClient("192.168.1.100");
DB db = mongoClient.getDB("my_db");
db.authenticate("my_user", "my_passwd".toCharArray());
DBCollection coll = db.getCollection("my_collection");
long counter = 10000l;
long start = System.currentTimeMillis();
for (int i=0; i<counter; i++){
coll.findOne();
}
double totalTime = (System.currentTimeMillis() - start) / 1000.0;
System.out.println(counter + " counter find operations in " + totalTime + " seconds (" + (counter/totalTime) + " per second)");
} catch (Exception e) {
e.printStackTrace();
}
}
}发布于 2014-09-03 15:45:30
根据这里的信息,我认为最有可能的解释是:您的测试代码是单线程的。当您使用单线程代码进行测试时,您测量的是操作的延迟,而不是吞吐量,因为MongoDB可以同时执行许多操作(只测量延迟,因为限制因素/慢步骤是单个操作的延迟,因此吞吐量数量并不是可以预期的最佳数量)。在此设置中,吞吐量数字并不表示MongoDB的实际吞吐量限制。这适用于所有的设置,因为它是相同的测试代码。对于切分、复制和本地测试,您的不同编号只意味着对于这些设置有不同的延迟。考虑到在切分设置中发生的配置服务器检查,延迟顺序切分>副本>本地是有意义的。
https://stackoverflow.com/questions/25586853
复制相似问题