mongoDb性能提升

博主在使用MongoDB时,发现按官网方式操作性能不佳,于是用单例模式进行封装。封装后MongoDB处于长链接状态,除首次操作耗时,后续操作数据库时间提升100倍以上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在弄MongoDB的时候 发现只按照官网的方式进行操作的话,性能不行,想着用单例模式封装一下,提升一下性能,代码如下:

//引入mongodb相关的模块
const MongoClient = require("mongodb").MongoClient;
//mongodb数据库的相关配置信息
const config = {
    //数据库链接地址
    dbUrl:"mongodb://localhost:27017",
    //要操作的数据库名称
    dbName:"ydb"
};
//创建相应的数据库实体类

//说明:因为操作数据库是一个异步操作 用一个promise解决异步问题 后面在koa中await就可以直接获取值了
class MgondoDb {
    //采用单例模式
    static getInstance() {
        if (!MgondoDb.instance) {
            MgondoDb.instance = new MgondoDb();
        }
        return MgondoDb.instance;
    }
    constructor(){
        this.dbClient = '';
        this.connect();
    }

    connect(){

      return new Promise((resolve,reject)=>{
          if(!this.dbClient){
              MongoClient.connect(config.dbUrl,(err,client)=>{
                  if(err){
                      reject(err)
                  }
                 else {
                      this.dbClient = client.db(config.dbName);
                      resolve(this.dbClient)
                  }

              });
          }
          else resolve(this.dbClient)
      })
    }
    insert(collectionName,json){
        return new Promise((resolve,reject)=>{
            this.connect().then((dbClient)=>{
                dbClient.collection(collectionName).insertOne(json,(err,data)=>{
                    if(err){
                        reject(err);
                        return false
                    }
                    resolve(data);
                });
            })
        })
    }
    remove(collectionName,json){
        return new Promise((resolve,reject)=>{
            this.connect().then((dbClient)=>{
                dbClient.collection(collectionName).remove(json,(err,data)=>{
                    if(err){
                        reject(err);
                        return false
                    }
                    resolve(data);
                });
            })
        })
    }
    update(collectionName,wjson,ujson){
        return new Promise((resolve,reject)=>{
            this.connect().then((dbClient)=>{
                dbClient.collection(collectionName).update(wjson,ujson,(err,data)=>{
                    if(err){
                        reject(err);
                        return false
                    }
                    resolve(data);
                });
            })
        })
    }
    find(collectionName,json){
        return new Promise((resolve,reject)=>{
            this.connect().then((dbClient)=>{
                let result = dbClient.collection(collectionName).find(json);
                result.toArray((err,data)=>{
                    if(err){
                        reject(err);
                        return false
                    }
                    resolve(data);
                })
            })
        })
    }

}
module.exports = MgondoDb.getInstance();

这样封装之后,MongoDB就处于长链接状态了,除了第一次操作数据库的时候会比较好时间而已,剩下操作数据库的时候,时间就会提升100倍以上,赶快器试试吧!

转载于:https://www.cnblogs.com/jsydb/p/10811694.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值