连接数据库

API 提供 DBConnection::connect 方法以连接数据库,该方法的声明如下:

bool connect(const string& hostName, int port, const string& userId = "", const string& password = "", const string& initialScript = "",
		     bool highAvailability = false, const vector<string>& highAvailabilitySites = vector<string>(), int keepAliveTime=7200, bool reconnect = false);

参数说明如下:

连接参数

  • hostName:所连接服务器的地址。

  • port:所连接服务器的端口。

  • userId:登录时的用户名,默认值为空。

  • password:登录时用户名对应的密码,默认值为空。

通过上述参数,用户可以连接到指定的IP地址和端口号上面的 DolphinDB,如果userId和password不为空,则在建立连接的同时登录账号。

脚本参数

initialScript:初始化脚本,在连接成功后会调用一次 。

该参数可以用于执行一些预加载任务。包含加载插件、加载分布式表、定义并加载流数据表等脚本。

高可用参数

  • highAvailability:是否开启 API 高可用,默认值为 false。

  • highAvailabilitySites:由所有可用节点的地址和端口组成的 vector,每个节点的格式为 ip:port

highAvailabilityhighAvailabilitySites 都是 API 高可用的相关配置参数。在高可用模式下,C++ API 在连接集群节点时会查询负载最小的节点,并与其建立连接。当使用单线程方式有一定延迟地(如下注意中的第一点)创建多个连接时,C++ API 可以保证所有可用节点上连接的负载均衡;但在使用多线程方式同时创建多个连接时,由于同时建立连接,每个 Session 建立时查询的最小负载节点可能为同一个,不能保证节点的负载均衡。

若要开启 API 高可用,则需要指定 highAvailability 参数为 True,同时通过 highAvailabilitySites 指定所有可用节点的地址和端口。

注:
  • 如果连续建立多个 Session,服务端集群间可能尚未同步负载信息,此时查询到的结果可能始终为同一个最小负载节点,无法保证节点的负载均衡。
  • 若开启高可用后不指定 highAvailabilitySites,则默认高可用组为集群全部节点。
  • 开启高可用相当于启用自动重连,当连接断开时,如果返回的错误信息为 <NotLeader> 则继续尝试重连错误信息中指定的 Leader 节点;如果返回的错误信息为其他,则尝试重连 highAvailabilitySites 列表中上一次成功连接的节点的下一个节点。

保活参数

keepAliveTime:表示在 TCP 连接空闲状态下,两次保活包之间的间隔时间,默认参数为 7200,单位秒(s)。

该参数与 DBConnection 构造函数中的 keepAliveTime 参数作用相同。

注:
  1. 该参数在 Linux、Windows、MacOS 平台均可生效。
  2. 在构造DBConnect对象时也可以设置该参数。

重连参数

reconnect:表示在不开启高可用的情况下,是否在 API 检测到连接异常时进行重连,默认值为 false。

若开启高可用模式,则 API 在检测到连接异常时将自动进行重连,不需要设置参数 reconnect;若未开启高可用,通过配置 reconnect = true,即可实现 API 在检测到连接异常时进行重连。

用法示例

conn.connect("127.0.0.1", 8848, "admin", "123456"); //连接IP地址为127.0.0.1,端口为8848的DolphinDB并登录,用户名为"admin",密码为"123456" 
conn.connect("127.0.0.1", 8848, "admin", "123456", "clearAllCache();");  //连接数据库,并执行初始化脚本"clearAllCache();"
std::vector<std::string> sites{"192.168.1.2:24120", "192.168.1.3:24120", "192.168.1.4:24120"};  //开启高可用,连接由三台DolphinDB节点组成的集群
conn.connect("192.168.1.2", 24120, "admin", "123456", "", true, sites);
conn.connect("127.0.0.1", 8848, "admin", "123456", "", false, std::vector<std::string>{}, 30, true);  //连接单节点数据库,设置保活包间隔为30秒,并开启自动重连