NOSQL原理,基础用法,NOSQL入门

前端之家收集整理的这篇文章主要介绍了NOSQL原理,基础用法,NOSQL入门前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
写在前面,以前只做随笔,现在老胳膊老腿了,写点博客玩玩,本博客只写白话和我的理解,难免有失误或者错误望多谅解,多探讨

目录:

1.简介

2.目标

3.解决问题的方式

4.实例应用

  • 1.简介

貌似是关系型数据库要求太多,偏离了咱们的目标太多,所以产生了这个并不仅仅是sqlsql。 nosql无表连接,无固定表结构,就一个键值对。想像一下,元组格式不统一,元组可以随便修改

  • 2.目标

解决关系数据库:1. 大量写入,建有数据的索引 ,快速简单查询,字段不固定时,的问题
2.多服务器分散存储,写入数据的时候那是贼快(负载均衡等等),因为关系数据库表之间关联太强,有Join操作,不是很适合分散到各台机器

NOsql有大体三类:key-value,面向文档,面向列,还有一类是图主要是用于处理数据关系比较强的情况
key-value:就是对keyhash然后做为主键,可以区别机器位置,提高查询速度等。
按存储方式分三种:临时,永久,折中:临时就是只操作内存,最终才保存到本地,可能丢失中间过程;永久就是都操作本地;折中就是像15分钟有 一个写入操作那么就写入:5分钟10次,1分钟10000次等方式保存数据。
适用场景:会话、配置文件、参数、购物车,表连接不行哦,写入效果不错,简单读取也不错,但精确查询呢?冒似不及关系数据库
不适合场景:按value查询,事务回滚,需要存储数据间的关系
面向文档:json类似的东西,也有基本的数据类型,简单理解就是json类似的东西,key可以是名称value可以是各种类型,
适用场景:日志,分析。
不适合场景:类似于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为最第一条

猜你在找的NoSQL相关文章