连接数据库
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
。
highAvailability 和 highAvailabilitySites 都是 API 高可用的相关配置参数。在高可用模式下,C++ API 在连接集群节点时会查询负载最小的节点,并与其建立连接。当使用单线程方式有一定延迟地(如下注意中的第一点)创建多个连接时,C++ API 可以保证所有可用节点上连接的负载均衡;但在使用多线程方式同时创建多个连接时,由于同时建立连接,每个 Session 建立时查询的最小负载节点可能为同一个,不能保证节点的负载均衡。
若要开启 API 高可用,则需要指定 highAvailability 参数为 True,同时通过 highAvailabilitySites 指定所有可用节点的地址和端口。
- 如果连续建立多个 Session,服务端集群间可能尚未同步负载信息,此时查询到的结果可能始终为同一个最小负载节点,无法保证节点的负载均衡。
- 若开启高可用后不指定 highAvailabilitySites,则默认高可用组为集群全部节点。
- 开启高可用相当于启用自动重连,当连接断开时,如果返回的错误信息为
<NotLeader>
则继续尝试重连错误信息中指定的 Leader 节点;如果返回的错误信息为其他,则尝试重连 highAvailabilitySites 列表中上一次成功连接的节点的下一个节点。
保活参数
keepAliveTime
:表示在 TCP 连接空闲状态下,两次保活包之间的间隔时间,默认参数为 7200,单位秒(s)。
该参数与 DBConnection 构造函数中的 keepAliveTime 参数作用相同。
- 该参数在 Linux、Windows、MacOS 平台均可生效。
- 在构造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秒,并开启自动重连