最近在尝试使用 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、遇到了哪些问题?

  GCC\BOOST版本过高或过低时,都会有问题,而这个问题是很难排查的,如果本身机器上就存在不同版本的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、封装

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

mongodb 与 c++ 的配合使用的更多相关文章

  1. MongoDB与php的配合使用 【windows版】

    通过学习了如何使用和部署MongoDB,尝试了一下如何将mongodb应用到php的程式中去. 1.预备工作 首先得准备好mongodb,并按照相关方法部署以及服务能正常运行中. 对于初学者,可以参考 ...

  2. docker-compose部署mongodb+redis遇到的问题

    Demo环境下需要用到Redis+mongodb两种DB配合使用,所以暂时直接使用docker的redids和mongodb镜像,用docker-compose进行联合部署 使用的版本如下: dock ...

  3. 【翻译】MongoDB指南/引言

    [原文地址]https://docs.mongodb.com/manual/ 引言 MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性 1.文档数据库 MongoDB用一个文档来 ...

  4. MongoDB数据库的CURD的一些基本语句

    from:http://www.data321.com/shujuku/20160514417/addToSetQianMianBuXuYaoJinXing 插入文档: SQL语句: INSERT I ...

  5. 放养的小爬虫--豆瓣电影入门级爬虫(mongodb使用教程~)

    放养的小爬虫--豆瓣电影入门级爬虫(mongodb使用教程~) 笔者声明:只用于学习交流,不用于其他途径.源代码已上传github.githu地址:https://github.com/Erma-Wa ...

  6. MongoDB配置文件YAML-based选项全解

    配置文件部分 MongoDB引入一个YAML-based格式的配置文件.2.4版本以前的仍然兼容. 我的mongodb配置文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  7. MongoDB学习笔记——数据库安装及配置

    MongoDB数据库安装 MongoDB官方下载地址:https://www.mongodb.com/download-center 首先需要根据Windows版本选择正确的MongoDB版本进行安装 ...

  8. MongoDB基本操作命令

    由于工作需要,笔者这两天使用了一下MongoDB.真的很不习惯!但是确实好用,命令比mysql和sqlserver简单很多.在这里整理一些MongoDB的基本操作命令分享出来. 客户端的安装就不说了, ...

  9. Mongodb查询的用法,备注防止忘记

    最近在用这个东西,为防止忘记,记下来. 集合简单查询方法 mongodb语法:db.collection.find()  //collection就是集合的名称,这个可以自己进行创建. 对比sql语句 ...

随机推荐

  1. 【bzoj1588】 HNOI2002—营业额统计

    http://www.lydsy.com/JudgeOnline/problem.php?id=1588 (题目链接) 题意 给出一个序列,对于每一个数,找出之前与它相差最小的数,两者相减取绝对值加入 ...

  2. 禁用Resharper长代码自动换行的解决办法

    Resharper Options=> C#=> Formatting Style=> Line Breaks and Wrapping=> Right margin(colu ...

  3. wordpress /wp-content/plugins/wp-symposium/server/php/UploadHandler.php File Arbitrary Upload Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Relevant Link:2. 漏洞触发条件3. 漏洞影响范围4. 漏 ...

  4. 帮助理解委托、匿名委托、Lambda表达式还有事件

    写了一个小程序,能够很好的认识到这三个的用法 namespace Lambda { /// <summary> /// 实现根据指定运算形式 输出结果 /// </summary&g ...

  5. git命令笔记2

    . # 忽略所有后缀为.a的文件 *.a # 不忽略lib.a(相对于上面的) !lib.a # 只忽略根下的TODO,不递归到子目录 /TODO # 忽略所有build/下的文件 build/ # ...

  6. UEditor上传图片到七牛云储存(java)

    我们的网站一般放在虚拟空间或者服务器上,图片如果存在本地目录,会占用很多空间和流量,还增加了负担,好的办法是把图片存放到云储存服务里面,平时用url去拿 云储存:普遍说又拍云和七牛比较好,看到七牛免费 ...

  7. CF 444C DZY Loves Physics(图论结论题)

    题目链接: 传送门 DZY Loves Chemistry time limit per test1 second     memory limit per test256 megabytes Des ...

  8. python抓取网页过程

    准备过程 1.抓取网页的过程 准备好http请求(http request)->提交对应的请求->获得返回的响应(http response)->获得网页源码 2.GET还是POST ...

  9. CentOS 下安装

    2016年12月5日15:25:58 ----------------------------------- 通常情况下在centos下安装软件就用yum. 关键是,使用yum你要知道安装包的名字是什 ...

  10. 【Beta】第二次任务发布

    后端 了解社区新建文章.添加评论(回复)的机制.整理成API文档,包括如何请求新建文章.新建评论(回复).如何获取文章内容和评论内容. 验收条件:文档PM要能看懂. 前端 微调数据输入部分的布局和操作 ...