首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mongos节流查询速度

Mongos节流查询速度
EN

Stack Overflow用户
提问于 2014-08-30 21:20:49
回答 1查看 897关注 0票数 1

我有一个Mongov2.6.4集群,其中包括:

  • 2台运行mongos实例的应用服务器
  • 3台独立配置服务器
  • 复制集中的3台单神服务器

通过应用服务器,我可以毫无问题地连接到集群。但是,每台服务器每秒只能查询1k (这是来自使用Java驱动程序的小型集合上的快速findOne )。在我的开发环境中,在一个小型vm上,我看到同一个测试应用程序每秒有超过4k的查询。

真正奇怪的是,如果我添加更多的应用服务器,我可以每秒从每个应用服务器获得大约1k个查询(也就是说,4个应用服务器每秒可以得到大约4k个查询)。这使我相信mongos设置有问题,它限制了查询性能。

我疯了吗?有什么方法可以提高芒戈斯的表现吗?

编辑1(添加示例代码和有关mongos配置的详细信息)

mongos配置是100%默认的,除了

代码语言:javascript
运行
复制
configdb=server1,server2,server3
maxConns=10000

在其中一个应用服务器上运行的快速测试代码

代码语言:javascript
运行
复制
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();
        }

    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-03 15:45:30

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25586853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档