zoukankan      html  css  js  c++  java
  • mongodb 与 c++ 的配合使用

      最近在尝试使用 mongodb 作为服务端持久化方案,服务端程序是使用 c++ 写的,折腾了不少时间,记录一下吧。

    1、下载 boost 1.56.0

    http://www.boost.org/users/history/version_1_56_0.html

    2、下载 mongo-cxx-driver-legacy-1.0.2

    https://github.com/mongodb/mongo-cxx-driver/releases/tag/legacy-1.0.2

    3、还有其它的一些限制条件,如 gcc 4.8.2 ,安装 scons ,python 2.7.9

    4、先升级好 gcc,将注意在 /usr/bin 目录下做好 cc/c++/gcc/g++ 的软链接,且将 libstdc++.so.6 文件复制到 /usr/lib64 目录下;然后安装 boost,将默认安装在 /usr/local/lib/ 目录下的动态库复制到 /usr/lib64 目录下。

    5、解压 mongo-cxx-driver-legacy-1.0.2 进入目录后进行编译:

    scons all -j8

    编译后生成的头文件和静态库存放在 build/install/ 目录下,这些都是 mongodb 的 c++ 驱动程序最终需要的。

    6、编写测试代码 test.cpp :

    #include <iostream>
    #include "mongo/client/dbclient.h"
    
    int main() {
        try
        {
            mongo::DBClientConnection conn;
            conn.connect("127.0.0.1");
            std::cout<<"connected ok"<<std::endl;
        } catch(mongo::DBException &e)
        {
            std::cout <<e.what()<<std::endl;
        }
    }

      编译此测试代码的命令为:

    g++ test.cpp -I include/ -L lib/ -lmongoclient -lboost_system -lboost_regex -lboost_thread

      注意,此处省略了一些简单的细节,如 include 目录下存放了 mongo 和 boost 的头文件,lib 目录下存放了后面指明的四个链接库。

      更多使用方法,请参考官方资料:https://github.com/mongodb/mongo-cxx-driver/wiki/Tutorial

      详细的API,请参考:http://api.mongodb.org/cxx/legacy-1.0.0/namespacemongo.html

      

    7、遇到了哪些问题?

      GCCBOOST版本过高或过低时,都会有问题,而这个问题是很难排查的,如果本身机器上就存在不同版本的GCC/BOOST,那么升级时一定要注意顺序:先升级PYTHON,再安装好SCONS,再升级GCC并配置好环境,再用新的GCC去编译BOOST,用新的BOOST完全替换掉系统中原本存在的BOOST(否则可能编译过了,但运行会出现段错误;或者在链接 boost_thread 时出错,只能链接 boost_thread-mt ,但后者会影响到使用BOOST写的服务端底层的编译)

    8、还有一些有待进一步深入的问题

      mongodb 的 c++ 驱动有四个版本(实质上应该是三个),一是我们现在使用的 legacy 版本;二是 26compat 版本;三是使用 c++11 重写的新版本;四是 mongodb 开源程序中自带了 c++ 驱动,应该是前面三种中的一种。

      理论上应该使用 c++11 的新版本,这样或者就可以把GCC/BOOST都升到最高版本,是未来的趋势。但得等有时间才能去折腾了,暂时先这样用着吧。

      所有的 mongo-cxx-driver 可以在下面的地址下载:

    https://github.com/mongodb/mongo-cxx-driver

    9、封装

      封装以方便使用,待补充。

  • 相关阅读:
    并发编程 之 生产者消费者模型
    并发编程 之 IPC机制
    Django + DRF + Elasticsearch 实现搜索功能
    时间上相邻query,前缀去重
    列表套字典,将字典元素去重
    K8s
    docker
    数据处理
    Django日志配配置
    Canvas 获取颜色值
  • 原文地址:https://www.cnblogs.com/tianyajuanke/p/4511748.html
Copyright © 2011-2022 走看看