当我使用像这样的单个mongos1.1.1.1:30000
时,驱动程序会在20ms内返回并找到一批文件。
当我使用1.1.1.1:30000,1.1.1.2:30000,1.1.1.3:30000
时,它花费60ms,返回的时间是原来的三倍。(找到同一批次)
当我使用 5 个 mongos 实例时,增加了 5 倍。
也许最好在本地使用 mongos。但为什么?
对不起,我对蒙戈一无所知。我所知道的是,mongo 客户端总是被这样描述
mongoc_client_t 是一种不透明类型,提供对 MongoDB 服务器、副本集或分片集群的访问。
这无法解释发生了什么以及为什么 mongo 驱动程序会花费更多时间,因为在 uri 中使用更多的 mongos 节点是这样的:
mongocxx::client client_;
client_.reset(new mongocxx::client{mongocxx::uri{"1.1.1.1:30000,1.1.1.2:30000,1.1.1.3:30000"}});
...
mongocxx::read_preference read_preference;
read_preference.mode(mongocxx::read_preference::read_mode::k_secondary_preferred);
find_options.read_preference(read_preference);
auto collection = (*client_)["db"]["col"];
auto cursor = collection.find(filter_builder.view(), find_options);
...
PS:所有mongos指的是同一个集群。
我现在正在尝试调试最新的驱动程序。
在这种情况下我的司机:
mongo-c-驱动程序:
#define MONGOC_VERSION_S "1.5.1"
mongo-cxx-驱动程序:
#define MONGOCXX_VERSION_STRING "3.1.1"
网络和延迟时间:
1.1.1.1,1.1.1.2,1.1.1.3都在同一个房间
潜伏:
ping localhost 0.03ms
ping 1.1.1.2(from 1.1.1.1) 0.2ms
批量大小:大约 100 个
find{"uid":{"$in":[1,2,3...,100]}}
uid 是一个可靠的索引。