使用C++连接MongoDB集群
来源:互联网 发布:矿用u型钢支架数据 编辑:程序博客网 时间:2024/06/02 01:19
项目中用到了MongoDB,由于担心将来接口请求量过大后,单服务会出现宕机。所以研究了下mongo的集群,但发现了好多问题,在这里记录下。
我的编译环境:Centos 6.8、mongodb3.0+、mongodbC++ driver 2.6。
以SYNC方式连接mongodb
先上代码:
/* * 连接mongodb集群使用案例 * */#include <mongo/client/dbclient.h>#include <mongo/client/syncclusterconnection.h>#include "json/json.h"#include <iostream>#include <string>#include <list>using namespace std;int main(int argc, char **argv){ char *ip[3] = {"xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx"}; int port = 27020; //构建mongodb服务器地址列表 list<mongo::HostAndPort> servers; for(int i = 0; i < 3; i++) { mongo::HostAndPort host(ip[i], port); servers.push_back(host); } //初始化对象 mongo::SyncClusterConnection sync(servers); while(1) { try { string errmsg; if(!sync.prepare(errmsg)) //准备对mongodb的连接 { cout << "prepare error: " << errmsg << endl; } errmsg = ""; if(!sync.fsync(errmsg)) //连接mongodb集群 { cout << "fsync error: " << errmsg << endl; } cout << sync.getServerAddress() << endl; //mongo::BSONObjBuilder rule; //Json::Value json_reply; //生成查询规则 //rule.appendNumber("_id", 400000); //mongo::Query query(rule.obj()); //auto_ptr<mongo::DBClientCursor> p_corsr; //do //{ // //执行查询 // p_corsr = sync.query("test.table1", query, 0, 0, NULL, 0, 0); //} //while(p_corsr->more()); //判断是否查询到数据 if(argc >= 2) //启动时提供参数则读取数据 { mongo::BSONObjBuilder rule; Json::Value json_reply; //生成查询规则 rule.appendNumber("age", 25); mongo::Query query(rule.obj()); auto_ptr<mongo::DBClientCursor> p_corsr; cout << "query start:" << endl; do { //执行查询 p_corsr = sync.query("test.test", query, 0, 0, NULL, 0, 0); } while(p_corsr->more()); //判断是否查询到数据 cout << "query over" << endl; } else { int _id = 0; srand(time(NULL)); cout << "insert start:" << endl; while(1) { mongo::BSONObjBuilder rule; string name; for(int i = 0; i < 5; i++) { name += (char) ((rand() % 26)) + 97; } //生成查询规则 rule.appendNumber("_id", _id++); rule.appendNumber("age", (rand() % 99) + 1); rule.append("name", name); auto_ptr<mongo::DBClientCursor> p_corsr; //执行插入数据 sync.insert("test.test", rule.obj()); sleep(1); } cout << "insert end" << endl; } } catch(exception &e) { cout << "Error:"<< e.what() << endl; } } return 0;;}
- 连接后读取和插入会对第一个IP的mongo进行操作,这时宕掉其他两台的服务后,读取可以正常读取,写入在宕掉任何一台都会报错,但当其他两台在正常运行的状态下宕掉第个IP的服务后读取和写入操作都会报错,在重新启动服务后连接可以恢复正常。那么问题来了:如果这样要集群有个毛用?是我的操作不对,还是大家都会遇到这样的问题?
0 0
- 使用C++连接MongoDB集群
- Mongodb设置Replica Set集群 并使用PHP来连接
- MONGODB 集群 配置及 客户端PHP 连接
- MONGODB 集群 配置及 客户端PHP 连接
- golang 使用mgo 连接MongoDB
- go使用mgo连接mongodb
- Jmeter使用Groovy连接Mongodb
- MongoDB的使用及集群搭建
- MongoDB集群
- mongodb集群
- MongoDb集群
- MongoDB集群
- MongoDB集群
- c#.net连接mongodb入门(一)
- mongodb c++driver连接数据错误
- Mongodb c Driver 使用实例
- mongodb的c驱动使用
- mongoDB C Driver使用介绍
- 使用AlertDialog 创建四种常见的对话框
- iOS上架自己遇到的错误
- Android Apk瘦身
- 【2016/11/4学习笔记】利用bootstrap modal功能做可用于锁屏的遮罩
- c++11使用
- 使用C++连接MongoDB集群
- Android应用开发allowBackup敏感信息泄露的一点反思
- 栈的应用1:就近匹配
- 前端实时可视化开发工具
- WebRTC中RTP/RTCP协议实现分析
- CSS-文本
- 【数据结构】链表——客房管理
- UIImageView
- LeetCode 76 Minimum Window Substring