zoukankan      html  css  js  c++  java
  • mongoDb性能提升

    最近在弄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倍以上,赶快器试试吧!

  • 相关阅读:
    Spring Boot发布2.6.2、2.5.8:升级log4j2到2.17.0
    如何优雅地读写HttpServletRequest和HttpServletResponse的请求体
    更快的Maven来了
    Spring Cloud Gateway过滤器精确控制异常返回(实战,控制http返回码和message字段)
    NumPy学习笔记
    来自Java程序员的Python新手入门小结
    Java应用日志如何与Jaeger的trace关联
    Jaeger知识点补充
    分布式调用链跟踪工具Jaeger?两分钟极速体验
    Spring Cloud Gateway过滤器精确控制异常返回(实战,完全定制返回body)
  • 原文地址:https://www.cnblogs.com/jsydb/p/10811694.html
Copyright © 2011-2022 走看看