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、遇到了哪些问题?
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++ 的配合使用的更多相关文章
- MongoDB与php的配合使用 【windows版】
通过学习了如何使用和部署MongoDB,尝试了一下如何将mongodb应用到php的程式中去. 1.预备工作 首先得准备好mongodb,并按照相关方法部署以及服务能正常运行中. 对于初学者,可以参考 ...
- docker-compose部署mongodb+redis遇到的问题
Demo环境下需要用到Redis+mongodb两种DB配合使用,所以暂时直接使用docker的redids和mongodb镜像,用docker-compose进行联合部署 使用的版本如下: dock ...
- 【翻译】MongoDB指南/引言
[原文地址]https://docs.mongodb.com/manual/ 引言 MongoDB是一种开源文档型数据库,它具有高性能,高可用性,自动扩展性 1.文档数据库 MongoDB用一个文档来 ...
- MongoDB数据库的CURD的一些基本语句
from:http://www.data321.com/shujuku/20160514417/addToSetQianMianBuXuYaoJinXing 插入文档: SQL语句: INSERT I ...
- 放养的小爬虫--豆瓣电影入门级爬虫(mongodb使用教程~)
放养的小爬虫--豆瓣电影入门级爬虫(mongodb使用教程~) 笔者声明:只用于学习交流,不用于其他途径.源代码已上传github.githu地址:https://github.com/Erma-Wa ...
- MongoDB配置文件YAML-based选项全解
配置文件部分 MongoDB引入一个YAML-based格式的配置文件.2.4版本以前的仍然兼容. 我的mongodb配置文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- MongoDB学习笔记——数据库安装及配置
MongoDB数据库安装 MongoDB官方下载地址:https://www.mongodb.com/download-center 首先需要根据Windows版本选择正确的MongoDB版本进行安装 ...
- MongoDB基本操作命令
由于工作需要,笔者这两天使用了一下MongoDB.真的很不习惯!但是确实好用,命令比mysql和sqlserver简单很多.在这里整理一些MongoDB的基本操作命令分享出来. 客户端的安装就不说了, ...
- Mongodb查询的用法,备注防止忘记
最近在用这个东西,为防止忘记,记下来. 集合简单查询方法 mongodb语法:db.collection.find() //collection就是集合的名称,这个可以自己进行创建. 对比sql语句 ...
随机推荐
- Hash_1014: [JSOI2008]火星人prefix
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- ecshop /includes/modules/payment/alipay.php SQL Injection Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECSHOP支付插件存在SQL注入漏洞,此漏洞存在于/includes/ ...
- webbench详解
安装 mkdir -p /usr/local/man/man1 yum install ctags -y tar zxvf webbench-1.5.tar.gzcd webbench-1.5make ...
- PriorityQueue
基本概念 顾名思义,PriorityQueue是优先级队列,它首先实现了队列接口(Queue),与LinkedList类似,它的队列长度也没有限制,与一般队列的区别是,它有优先级的概念,每个元素都有优 ...
- 分布式存储数据库的Key的随机分布(RP)和顺序分布(OPP)
在分布式存储数据库的世界中,无论是基于Key/Value的数据库还是Column Base(比如HBase)的数据库,都有一个重要的因子------Key,或者叫RowKey.我们总是根据Key来快速 ...
- [转]virtualenv and virtualenvwrapper
转自 http://liuzhijun.iteye.com/blog/1872241 virtualenv virtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能 ...
- Gated Recurrent Unit (GRU)公式简介
update gate $z_t$: defines how much of the previous memory to keep around. \[z_t = \sigma ( W^z x_t+ ...
- java语言:Linux与JVM的内存关系分
在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用大约800m.从表面上,物理内存应该 ...
- django rest framework 入门
django rest framework 入门1-序列化 Serialization 分类: Python 2013-01-22 22:24 11528人阅读 评论(0) 收藏 举报 djangop ...
- python 线程编程
在threading模块中,定义两种类型的锁:threading.Lock和threading.RLock.它们之间有一点细微的区别,通过比较下面两段代码来说明: import threading l ...