注册

详解MongoDB的start_secondary()函数:开始一个新的从节点

MongoDB的start_secondary()函数作用和使用方法

start_secondary()是MongoDB的C++驱动程序提供的一个函数,它用于启动MongoDB secondary节点的复制流程。这个函数需要在应用程序代码中手动调用,通常在创建连接MongoDB实例的 mongocxx::client 对象后,开启对secondary节点的复制流程时被调用。

函数原型

mongocxx::client::session start_secondary(
   const bsoncxx::stdx::optional& read_concern = {},
   const bsoncxx::stdx::optional& read_preference = {},
   const bsoncxx::stdx::optional& write_concern = {},
   std::function callback = nullptr
);

函数参数

  • read_concern,可选参数,读关注点设置。默认为空。
  • read_preference,可选参数,读偏好设置。默认为空。
  • write_concern,可选参数,写关注点设置。默认为空。
  • callback,可选参数,一个回调函数指针,当secondary节点成功连接时被触发。默认为空。

函数返回值

mongocxx::client::session 对象,已经启用了副本集的secondary节点的读写会话。

使用方法

下面我们来看两个实例的使用方法。

实例一

我们有一个MongoDB实例,它已经是一个副本集。我们要在一个C++应用程序中使用MongoDB的C++驱动程序连接到这个MongoDB实例,并启用一个secondary节点的读写会话。

#include 
#include 

int main() {
  mongocxx::uri uri("mongodb://localhost:27017/?replicaSet=myreplica");
  mongocxx::client client(uri);
  auto session = client.start_secondary();
}

在这个示例中,我们使用 mongocxx::uri 对象传递连接字符串和副本集名称:myreplica。然后,我们使用 mongocxx::client 对象连接到MongoDB实例。最后,我们使用 client.start_secondary() 函数启用一个secondary节点的读写会话,并将返回值赋给 session 对象。

实例二

如果我们想要使用自定义选项启用secondary节点的读写会话,我们可以在 start_secondary() 函数中传递这些选项。

#include 
#include 

int main() {
  mongocxx::uri uri("mongodb://localhost:27017/?replicaSet=myreplica");
  mongocxx::read_concern rc;
  rc.level(mongocxx::read_concern_level::k_maj_quorum);

  mongocxx::read_preference rp(mongocxx::read_mode::k_secondary_preferred);

  mongocxx::write_concern wc;
  wc.majority(std::chrono::milliseconds(1000));

  mongocxx::client client(uri);
  auto session = client.start_secondary(rc, rp, wc);
}

在这个示例中,我们为 start_secondary() 函数传递了三个选项:读关注点,读偏好和写关注点。我们使用这些选项自定义了secondary节点的读写会话。