資源簡介
該代碼是C++ MongoDB的連接池代碼實(shí)現(xiàn)。代碼封裝了一個連接池類對象,通過該對象提供的連接池來操作MongoDB,提升了性能,減少了數(shù)據(jù)庫連接資源的開銷。
代碼片段和文件信息
//函數(shù)返回0:成功?>0?出錯
class?cmongo{
????public:
????????//默認(rèn)構(gòu)造函數(shù),默認(rèn)連接數(shù)為1
????????cmongo();
????????//傳入連接數(shù)到構(gòu)造函數(shù),默認(rèn)連接數(shù)為size
????????cmongo(int?size);
????????//析構(gòu)函數(shù)
????????~cmongo();
????public:
????????//設(shè)置tcp讀寫超時(shí)時(shí)間
????????int?set_wr_timeout(double?t);
????????//連接
????????int?conn(string?mhost=“127.0.0.1“int?mport=27017);
????????//設(shè)置db?collection
????????int?setdb(string?mdbstring?mcollection);
????????int?setindex(string?key);
????????//查詢
????????int?get(map&?outvector?instring?keystring?key_val);
????????//投遞一批要查詢的字段,fields為要查詢哪些字段
????????int?gets(map?>&?routvector?fieldsvector?instring?key);
????????//dump?key-value?dumpkey對應(yīng)一個value
????????int?dumpkey(map&?routstring?keystring?val);
????????//dump?key->map?dumpkey對應(yīng)一組value
????????int?dumpvals(map?>&?routvector?instring?key);
????????//寫入
????????int?set(map?instring?keystring?key_val);
????????//批量寫入
????????//更新接口,批量更新key=“id“
????????//??“123456“:
????????//??“123457“:
????????int?sets(map?>?instring?key);
????????//刪除
????????int?remove(string?keystring?key_val);
????private:
????????string?doc;
????????//tcp讀寫超時(shí)時(shí)間
????????double?wr_timeout;
????????pthread_mutex_t?_jobmux;
????????sem_t?_jobsem;
????????map?_joblst;
????????pthread_mutex_t?_dbmux;
};
cmongo::cmongo(int?size){
????//doc
????doc=string(DB_DB)+“.“+string(DB_COLLECTION);
????wr_timeout=3;
????//最大連接0-200
????if(size<0){
????????size=1;
????}
????if(size>200){
????????size=200;
????}
????if(_joblst.size()>0){
????????return;
????}
????bool?auto_conn=true;
????pthread_mutex_init(&_jobmuxNULL);
????if((sem_init(&_jobsem00))<0){
????????return;
????}
????pthread_mutex_lock(&_jobmux);
????for(int?i=0;i ????????DBClientConnection*?pconn?=?new?DBClientConnection(auto_conn0wr_timeout);
????????if(pconn?!=?NULL){
????????????_joblst[pconn]=false;
????????}
????}
????pthread_mutex_unlock(&_jobmux);
}
cmongo::~cmongo(){
????doc=““;
????pthread_mutex_lock(&_jobmux);
????map::iterator?it=_joblst.begin();
????while(it?!=?_joblst.end()){
????????delete?it->first;
????????it++;
????}
????pthread_mutex_unlock(&_jobmux);
}
int?cmongo::set_wr_timeout(double?t){
????wr_timeout=t;
????return?RET_OK;
}
int?cmongo::conn(string?mhostint?mport){
????pthread_mutex_lock(&_jobmux);
????map::iterator?it=_joblst.begin();
????while(it!=_joblst.end()){
????????string?errmsg=““;
????????HostAndPort?hp(mhostmport);
????????if(!(it->first->connect(hperrmsg))){
????????????cerr<<“connect?mhost:“< ????????????it->second=true;
????????}
????????sem_post(&_jobsem);
????????it++;
????}
??
- 上一篇:C++編寫的后方交會程序
- 下一篇:簡單多線程socket聊天室程序(c語言)
評論
共有 條評論