gpt4 book ai didi

java - Mongos 限制查询速度

转载 作者:行者123 更新时间:2023-12-02 05:30:37 25 4
gpt4 key购买 nike

我有一个 mongo v2.6.4 集群:

  • 2 个运行 mongos 实例的应用服务器
  • 3 个独立配置服务器
  • 副本集中有 3 个 mongod 服务器

从应用程序服务器我可以毫无问题地连接到集群。然而,每台服务器每秒只能进行约 1k 次查询(该数字来自使用 Java 驱动程序在小型集合上进行的快速 findOne)。在小型虚拟机上的开发环境中,我发现同一测试应用程序每秒有超过 4k 次查询。

真正奇怪的是,如果我添加更多应用程序服务器,我可以同时从每个应用程序服务器每秒获得约 1k 个查询(即 4 个应用程序服务器每秒总共可以获得约 4k 个查询)。这让我相信 mongos 设置有问题,限制了查询性能。

我疯了吗?有什么方法可以提高 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();
}

}

}

最佳答案

根据此处的信息,我认为最可能的解释如下:您的测试代码是单线程的。当您使用单线程代码进行测试时,您正在测量操作的延迟,而不是吞吐量,因为 MongoDB 可以同时执行许多操作(仅测量延迟,因为限制因素/慢步骤是单个操作的延迟,因此吞吐量数字不是可以预期的最佳值)。吞吐量数字并不表示此设置中 MongoDB 的实际吞吐量限制。这适用于您的所有设置,因为它是相同的测试代码。分片、副本和本地测试的不同数字仅意味着这些设置的延迟不同。考虑到分片设置中发生的配置服务器检查,延迟顺序分片 > 副本 > 本地是有意义的。

关于java - Mongos 限制查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25586853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com