• mongodb系列3 mongo mongoskin 连接以及连接数的问题进阶


    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 会出现阻塞 解决方案是使用连接池对象模式 

    具体请参考这篇文章   关于连接数的思路都是从上面来的    https://cnodejs.org/topic/5190d61263e9f8a542acd83b  mongodb驱动的正确使用方法

  • 相关阅读:
    BroadcastReceiver之发送自定义无序广播
    BroadcastReceiver之应用卸载和安装监听
    Android几种打开SQLite的方法
    BroadcoastReceiver之短信到来监听和获取内容
    BroadcastReceiver之SD的挂载监听
    BroadcastReceive之ip拨号
    Activity之多启动图标
    Uwp Windows10获取设备位置(经纬度)
    DeviceFamily XAML Views(一)
    [SCOI2010]生成字符串
  • 原文地址:https://www.cnblogs.com/tiantianwaigong/p/5408730.html
Copyright © 2020-2023  润新知