zoukankan      html  css  js  c++  java
  • MongoDB_C_Driver使用教程(2)高级连接

    高级连接(Advanced Connection)

    以下指南包含MongoDB配置的特定类型的信息。
    简单的连接到独立服务器的示例,请参考MongoDB_C_Dirver使用教程
    要连接到启用身份验证选项的服务器,请参考身份验证页 Authentication page
    原文地址

    1、连接到一个副本集(Replica Set)

    连接到一个副本集与连接到独立的MongoDB服务器类似。只需要使用?replicaSet=副本集名指定URI的副本集名字选项。

    #include <bson.h>
    #include <mongoc.h>
    
    int
    main (int   argc,
          char *argv[])
    {
        mongoc_client_t *client;
        /* 初始化libmongoc's */
        mongoc_init ();
    
        /* 创建 MongoDB Client连接到副本集 */
        client = mongoc_client_new ("mongodb://host01:27017,host02:27017,host03:27017/?replicaSet=myreplset");
    
        /* Do some work */
        /* TODO */
    
        /* 清理 */
        mongoc_client_destroy (client);
        mongoc_cleanup ();
    
        return 0;
    }
    

    MongoDB连接字符串URI中可以指定多个主机名(hostname),使用,分割种子列表(seed list)中的指定的主机。

    更多信息

    [Advanced Connections](#Advanced Connections)

    2、连接到分片集群(Sharded Cluster)

    连接到分片集群,需要指定client要连接的mongos节点mongodb c dirver中会自动检查已连接到的mongo分片服务器。
    如果指定多个主机名,则种子列表(seed list)的创建将会在mongos实例之间尝试故障转移。

    连接到分片服务器时,指定replicaSet参数是无效的。

    #include <bson.h>
    #include <mongoc.h>
    
    int
    main (int   argc,
          char *argv[])
    {
        mongoc_client_t *client;
        /* 初始化libmongoc's */
        mongoc_init ();
    
        /* 创建MongoDB Client连接到分片集群 */
        client = mongoc_client_new ("mongodb://myshard01:27017/");
    
        /* Do something with client ... */
    
        /* 释放client */
        mongoc_client_destroy (client);
        mongoc_cleanup ();
    
        return 0;
    }
    

    更多信息

    关于集群,分布式集群等内容,可以参考
    http://www.cnblogs.com/aoldman/p/4191822.html
    http://www.cnblogs.com/huangfox/p/3543351.html

    3、连接到IPv6地址

    mongodb c dirver将自动解析IPv6地址到主机名(hostname)。在URI中指定IPv6地址时,需要使用[]进行包裹。

    mongoc_uri_t *uri = mongoc_uri_new ("mongodb://[::1]:27017");
    

    4、连接到Unix Domain Socket(Unix域套接字)

    在类Unix系统中,mongodb c dirver可以直接连接到使用Unix域套接字MongoDB服务器。只需要传入这个socket的路径,但必须使用.sock后缀。

    mongoc_uri_t *uri = mongoc_uri_new ("mongodb:///tmp/mysocket.sock");
    

    直接连接到Unix域套接字不是常见做法。

    5、通过SSL连接到服务器

    以下是配置TLS/SSL连接的说明。

    基本配置

    运行本地服务器(端口27017)示例

    $ mongod --port 27017 --sslMode requireSSL --sslPEMKeyFile server.pem --sslCAFile ca.pem 
    

    添加/?ssl=true到客户端URI尾部

    mongoc_client_t *client = NULL;
    client = mongoc_client_new ("mongodb://localhost:27017/?ssl=true");
    

    指定客户端证书

    默认情况下,MongoDB要求指定客户端证书,除非在提供--sslAllowConnectionsWithoutCertificates情况下。mongodb c dirver可以使用mongoc_ssl_opt_t为客户端配置证书。

    /* 获取默认的ssl选项 */
    const mongoc_ssl_opt_t *ssl_default = mongoc_ssl_opt_get_default ();
    /* 使用的ssl选项结构体 */
    mongoc_ssl_opts_t ssl_opts = { 0 };
    
    /* 可以选择从用户自定义的目录或文件拷贝;否则使用默认值. */
    memcpy (&ssl_opts, ssl_default, sizeof ssl_opts);   // 使用默认值
    //ssl_opts.pem_file = "client.pem";   // 使用自定义pem文件
    
    /* 为客户端设置ssl选项 */
    mongoc_client_set_ssl_opts (client, &ssl_opts);
    

    通过pem_file提供的客户端证书必须由--sslCAFile列出的服务器信任的证书颁发机构之一颁发。或者由服务器上的本地证书存储中的 CA 颁发,在使用默认值时。
    为了验证一个指定的CA服务器的证书,需要提供PEM armored文件(PEM装甲文件)和CA证书。或CA证书列表包含使用ca_file选项在,或CA的c_rehash目录结构。当没有提供ca_fileca_dirmongodb c dirver将使用本机平台证书存储区提供的CA。

    6、其他连接选项

    其他的连接选项的MongoDB URI可以看这里

  • 相关阅读:
    并查集
    强联通分量,缩点
    最短路径
    最小生成树
    拓扑排序
    图的遍历
    图论基础知识
    数据库四种隔离级别
    MySQL 索引 乐观锁 悲观锁
    MYSQL+正则
  • 原文地址:https://www.cnblogs.com/oloroso/p/5790491.html
Copyright © 2011-2022 走看看