博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongodb系列3 mongo mongoskin 连接以及连接数的问题进阶
阅读量:6152 次
发布时间:2019-06-21

本文共 2639 字,大约阅读时间需要 8 分钟。

1)使用mongodb连接mongo

var mongo = require('mongodb'), //引入mongodb    dbHost = '127.0.0.1',    dbPort = 27017;//配置基本的信息var Db = mongo.Db; var Connection = mongo.Connection;var Server = mongo.Server;var db = new Db ('local', new Server(dbHost, dbPort), {safe:true});  //初始化数据库对象db.open(function(error, dbConnection){  if (error) {    console.error(error);    process.exit(1);  }  var item = {    name:"haha"  };  dbConnection.collection("aa").insert(item,function(error,item){    if(error) {      console.error(error);      process.exit(1);    }    console.log("inserted");    db.close();    process.exit(0);  //向collection aa中插入一条数据(aa不存在的前提下会创建aa )  });});

看见成功在collection aa中插入了我在程序中创建的数据

2)使用mongoskin连接mongo

/** * Created by hao on 2016/4/19. */var mongoskin = require("mongoskin"),    dbHost = "127.0.0.1",    dbPort = 27017;var db = mongoskin.db(dbHost + ':' + dbPort + '/local',{safe:true});  //基本的数据库配置db.bind("aa",{  findOneAndAddAge:function(age,fn) {    db.collection("aa").findOne({},function(error,item){      if(error) {        console.log(error);        process.exit(1);      }      item.age = age;      db.collection("aa").save(item,function(error,item){        if(error) {            console.error(error);            process.exit(1);        }        console.log("saved");        db.close();      });    });  }}); //为数据集合创建方法自定义方法  这里当数据库中不存在相应的集合的时候,下面调用绑定的方法会出错 对比mongodb的连接情况db.collection("aa").findOneAndAddAge(22,function(){  console.log("changed");});

修改了数据

tip:mongoskin是node.js原生驱动mongodb的子集  也就是你也可以像使用mongodb那样使用mongoskin

3)进阶连接数

/** * Created by hao on 2016/4/19. */var server_options = {};var db_options = {  w:-1,  logger:{    log:function(msg,obj){      console.log('[log]' + msg);    }  }}; //开启的var mongodb = require("mongodb"),    mongoserver = new mongodb.Server("localhost",27017,server_options), //根据server_options去初始化server    db = new mongodb.Db('local',mongoserver,{safe:true});function test(){  db.open(function(error,dbCollection){    if(error) {      console.errro(error);      process.exit(1);    }    dbCollection.collection("aa").insert({name:"hao"},function(error,item){      if(error) {        console.error(error);        process.exit(1);      }      console.log("inserted");      db.close();    });  });}test();

在server_options中有个poolsize选项 默认值是5 db提供这个连接池  默认下每次请求过来会打开这个有5个连接的连接池,然后就关闭这个连接池,也就是每个请求过来都是打开5个连接然后在关闭5个连接 

 

上面的模式存在着问题,当访问数激增的时候,就会出现之前的连接还没有关闭,后面来的请求要求打开这个还没有关闭的请求出现错误 可以切换下面这种模式  就是程序启动的时候就open数据库的连接 ,然后在操作之后不去关闭这个连接,但是这种模式存在着一定的问题,就是当并发访问数大的时候,可用的数据库数据库连接数只有5 会出现阻塞 解决方案是使用连接池对象模式 

具体请参考这篇文章   关于连接数的思路都是从上面来的      mongodb驱动的正确使用方法

转载于:https://www.cnblogs.com/tiantianwaigong/p/5408730.html

你可能感兴趣的文章
thead 固定,tbody 超出滚动(附带改变滚动条样式)
查看>>
Dijkstra算法
查看>>
css 动画 和 响应式布局和兼容性
查看>>
csrf 跨站请求伪造相关以及django的中间件
查看>>
MySQL数据类型--与MySQL零距离接触2-11MySQL自动编号
查看>>
生日小助手源码运行的步骤
查看>>
Configuration python CGI in XAMPP in win-7
查看>>
bzoj 5006(洛谷 4547) [THUWC2017]Bipartite 随机二分图——期望DP
查看>>
CF 888E Maximum Subsequence——折半搜索
查看>>
欧几里德算法(辗转相除法)
查看>>
面试题1-----SVM和LR的异同
查看>>
MFC控件的SubclassDlgItem
查看>>
如何避免历史回退到登录页面
查看>>
《图解HTTP》1~53Page Web网络基础 HTTP协议 HTTP报文内的HTTP信息
查看>>
unix环境高级编程-高级IO(2)
查看>>
树莓派是如何免疫 Meltdown 和 Spectre 漏洞的
查看>>
雅虎瓦片地图切片问题
查看>>
HTML 邮件链接,超链接发邮件
查看>>
HDU 5524:Subtrees
查看>>
手机端userAgent
查看>>