目录:
1.简介
2.目标
3.解决问题的方式
4.实例应用
- 1.简介
- 3.解决问题的方式
NOsql有大体三类:key-value,面向文档,面向列,还有一类是图主要是用于处理数据关系比较强的情况
key-value:就是对keyhash然后做为主键,可以区别机器位置,提高查询速度等。
按存储方式分三种:临时,永久,折中:临时就是只操作内存,最终才保存到本地,可能丢失中间过程;永久就是都操作本地;折中就是像15分钟有 一个写入操作那么就写入:5分钟10次,1分钟10000次等方式保存数据。
不适合场景:按value查询,事务回滚,需要存储数据间的关系
面向文档:json类似的东西,也有基本的数据类型,简单理解就是json类似的东西,key可以是名称value可以是各种类型,
适用场景:日志,分析。
不适合场景:类似于key-value
面向列:
把关系紧密的以列族形式存储起来,一次取出
- 4.实例应用
由于俺主要C++现在就介绍用C++操作MongoDB
1.下载安装:这么低级的东西哪里值得介绍,哈哈,其实还是挺麻烦的,网上一大堆步骤,体力活,相信哥们一定可以搞定
2. 头文件及重要类
#include "dbclient.h"
using namespace mongo;
1)DBClientConnection连接相关操作
2)BSONObjBuilder插入对像的工厂类
3)Query查询器
4)BSONObj由BSONObjBuilder.obj()得到,实体对象
连接:
const char *port = "27017"; string errmsg; if ( ! conn.connect( string( "127.0.0.1:" ) + port,errmsg ) )
3.增删改查实例
增:
BSONObjBuilder obj; obj.append( "srcID",srcID ); obj.append( "destID",destID); obj.append( "msg",msg.c_str()); obj.append( "posttime",time); conn.insert( "test.testmsg",obj.obj() ); 或者 conn.insert( "test.test1",BSON( "_id" << i << "b" << i ) );
删:
conn.remove( "test.test1",BSONObj() ); //删掉表内所有记录。 conn.remove( "test.test1",BSON( "_id" << 99 ); //删掉_id为99的这条记录。 conn.dropCollection("test.test2");//删表 conn.remove("test.test1",q);//删除query到的记录
改:
更新符合条件记录: mongodb_.update("test.webuser",QUERY("web_uid" << 1001),BSON("status"<<1)); 更新所有记录: mongodb_.update("test.webuser",Query("{}"),BSON("status" << 1));
查:
char qbuf[256]; sprintf(qbuf,"this._id >= 50 && this._id <= 90"); Query q = Query("{}").where(qbuf); BSONObj res = conn.findOne("test.test",QUERY("_id"<<1001)); res.isEmpty()是否找到,并取出值 uint32_t = res.getIntField("_id"); string str = res.getStringField("name"); //遍历查找结果集 auto_ptr<DBClientCursor> cursor = conn.query( "test.message",BSON("srcID"<<1001),100); 条件cursor->more(),取下一条 cursor->next() //取最小值,取最大值 auto_ptr<DBClientCursor> cursor =conn.query("test.webuser",query.sort(BSON("web_uid" << -1)),1); //-1为降序,1为升序,后面的1为最第一条