दिलचस्प पोस्ट
मैं jQuery के साथ HTML विशेषता नाम कैसे बदल सकता हूं? पुनरावृत्त regex लिखने के लिए कैसे नेस्टेड कोष्ठक से मेल खाता है? एक फ़ाइल से दो प्रतिमानों के बीच लाइन निकालें "त्रुटि 1329 से छुटकारा पाने के लिए कैसे: कोई डेटा नहीं – शून्य पंक्तियों को प्राप्त, चयनित, या संसाधित" जावास्क्रिप्ट निजी संपत्तियों का उपयोग नहीं कर सकता प्रोग्रामिंग एंड्रॉइड फोन बंद करना क्या मुझे std :: function या C ++ में फ़ंक्शन पॉइंटर का उपयोग करना चाहिए? वेबव्यू एंड्रॉइड पर वेबपेज का एक हिस्सा प्रदर्शित करें $ $ एक स्क्रिप्ट बनाम $ $ एक सबशेल्ड में अपारदर्शी डेटा प्रकारों का स्थैतिक आवंटन जावा में एक स्ट्रिंग से अंक निकालें कैसे ठीक से एक ArrayList <पार्सीबल> के साथ पार्सलेबल को लागू करने के लिए? जावास्क्रिप्ट में तारों की तुलना करने के लिए इष्टतम तरीका है? सबसे सटीक एन्कोडिंग डिटेक्टर क्या है? स्विफ्ट विकल्प को कैसे खोलें?

मैं नोड.जेएस वेब अनुप्रयोग में मोंगोडीबी कनेक्शन कैसे प्रबंधित करूं?

मैं एक वेबसाइट लिखने के लिए मोंगोडीबी के साथ नोड-मोंगोडब-देशी चालक का उपयोग कर रहा हूं।

मेरे पास कुछ प्रश्न हैं कि कनेक्शन का प्रबंधन कैसे करें:

  1. क्या यह केवल सभी अनुरोधों के लिए केवल एक MongoDB कनेक्शन का उपयोग कर रहा है? क्या कोई प्रदर्शन समस्याएं हैं? यदि नहीं, तो क्या मैं पूरे आवेदन में उपयोग करने के लिए एक वैश्विक कनेक्शन सेटअप कर सकता हूं?

  2. यदि नहीं, तो क्या यह अच्छा है जब मैं अनुरोध करता हूं कि नया कनेक्शन खोलता हो, और अनुरोध को संभालने पर इसे बंद कर दें? क्या कनेक्शन खुलने और बंद करना महंगा है?

  3. क्या मुझे एक वैश्विक कनेक्शन पूल का उपयोग करना चाहिए? मैंने सुना है कि चालक के पास एक मूल कनेक्शन पूल है। क्या यह एक अच्छा विकल्प है?

  4. यदि मैं एक कनेक्शन पूल का उपयोग करता हूं, तो कितने कनेक्शन उपयोग किए जाएंगे?

  5. क्या अन्य बातों पर ध्यान देना चाहिए?

Solutions Collecting From Web of "मैं नोड.जेएस वेब अनुप्रयोग में मोंगोडीबी कनेक्शन कैसे प्रबंधित करूं?"

नोड-मोंगोडब-मूल के प्राथमिक मुहम्मद कहते हैं :

जब आप अपने ऐप को बूट करते हैं और डीबी ऑब्जेक्ट का पुन: उपयोग करते हैं, तब आप एक बार ब्लॉगर कनेक्ट करते हैं। यह एक सिंगलटन कनेक्शन पूल नहीं है। कनेक्ट करें एक नया कनेक्शन पूल बनाता है

इसलिए, सीधे अपने प्रश्न का उत्तर देने के लिए, डीएम वस्तु का पुन: उपयोग करें जो मोन्गोक्लेन्ट.कनेक्ट () से निकलते हैं। यह आपको पूलिंग देता है, और प्रत्येक डीबी कार्यवाही पर उद्घाटन / समापन कनेक्शन के मुकाबले तुलना में तेज गति प्रदान करता है।

Node.js अनुप्रयोग प्रारंभ होने पर एक नया कनेक्शन खोलें, और मौजूदा db कनेक्शन ऑब्जेक्ट का पुन: उपयोग करें:

/server.js

 import express from 'express'; import Promise from 'bluebird'; import logger from 'winston'; import { MongoClient } from 'mongodb'; import config from './config'; import usersRestApi from './api/users'; const app = express(); app.use('/api/users', usersRestApi); app.get('/', (req, res) => { res.send('Hello World'); }); // Create a MongoDB connection pool and start the application // after the database connection is ready MongoClient.connect(config.database.url, { promiseLibrary: Promise }, (err, db) => { if (err) { logger.warn(`Failed to connect to the database. ${err.stack}`); } app.locals.db = db; app.listen(config.port, () => { logger.info(`Node.js app is listening at http://localhost:${config.port}`); }); }); 

/api/users.js

 import { Router } from 'express'; import { ObjectID } from 'mongodb'; const router = new Router(); router.get('/:id', async (req, res, next) => { try { const db = req.app.locals.db; const id = new ObjectID(req.params.id); const user = await db.collection('user').findOne({ _id: id }, { email: 1, firstName: 1, lastName: 1 }); if (user) { user.id = req.params.id; res.send(user); } else { res.sendStatus(404); } } catch (err) { next(err); } }); export default router; 

स्रोत: एक Node.js / Express App में डाटाबेस कनेक्शन खोलने के लिए कैसे करें

यहां कुछ कोड है जो आपके मोंगोडीबी कनेक्शनों का प्रबंधन करेगा।

 var MongoClient = require('mongodb').MongoClient; var url = require("../config.json")["MongoDBURL"] var option = { db:{ numberOfRetries : 5 }, server: { auto_reconnect: true, poolSize : 40, socketOptions: { connectTimeoutMS: 500 } }, replSet: {}, mongos: {} }; function MongoPool(){} var p_db; function initPool(cb){ MongoClient.connect(url, option, function(err, db) { if (err) throw err; p_db = db; if(cb && typeof(cb) == 'function') cb(p_db); }); return MongoPool; } MongoPool.initPool = initPool; function getInstance(cb){ if(!p_db){ initPool(cb) } else{ if(cb && typeof(cb) == 'function') cb(p_db); } } MongoPool.getInstance = getInstance; module.exports = MongoPool; 

जब आप सर्वर शुरू करते हैं, तो initPool कॉल करें

 require("mongo-pool").initPool(); 

फिर किसी अन्य मॉड्यूल में आप निम्न कर सकते हैं:

 var MongoPool = require("mongo-pool"); MongoPool.getInstance(function (db){ // Query your MongoDB database. }); 

यह मोंगोडीबी प्रलेखन पर आधारित है। इस पर एक नज़र मारो।

यदि आपके पास Express.js है, तो आप पूल के बिना अनुरोधों के बीच MongoDB कनेक्शन को कैशिंग और साझा करने के लिए एक्सप्रेस-मॉंग-डीबी का उपयोग कर सकते हैं (क्योंकि स्वीकार किए गए उत्तर का कहना है कि यह कनेक्शन साझा करने का सही तरीका है)।

यदि नहीं – आप इसके स्रोत कोड को देख सकते हैं और इसे किसी दूसरे ढांचे में इस्तेमाल कर सकते हैं।

मैं अपने ऐप में रेडीस कनेक्शन के साथ जेनेरिक-पूल का उपयोग कर रहा हूं – मैं इसे अत्यधिक अनुशंसा करता हूं। इसकी जेनेरिक और मुझे निश्चित रूप से पता है कि यह mysql के साथ काम करता है, इसलिए मुझे नहीं लगता कि आपको इसके साथ कोई समस्या होगी और मॉंगो

https://github.com/coopernurse/node-pool

एकल स्वयं निहित मॉड्यूल में मोंगो कनेक्शन पूल प्रबंधित करें यह दृष्टिकोण दो लाभ प्रदान करता है सबसे पहले यह आपके कोड मॉड्यूलर और परीक्षण करने के लिए आसान रहता है। दूसरे, आपके डेटाबेस कनेक्शन को आपके अनुरोध ऑब्जेक्ट में मिश्रण करने के लिए मजबूर नहीं है जो कि डेटाबेस कनेक्शन ऑब्जेक्ट के लिए जगह नहीं है। (जावास्क्रिप्ट की प्रकृति को देखते हुए मैं पुस्तकालय कोड द्वारा बनाए गए किसी ऑब्जेक्ट में कुछ भी मिश्रण करने के लिए इसे बहुत खतरनाक समझता हूं)। इसलिए इसके साथ आपको केवल एक मॉड्यूल पर विचार करने की जरूरत है जो दो तरीकों का निर्यात करता है। connect = () => Promise और get = () => dbConnectionObject

ऐसे मॉड्यूल के साथ आप सबसे पहले डेटाबेस से कनेक्ट कर सकते हैं

 // runs in boot.js or what ever file your application starts with const db = require('./myAwesomeDbModule'); db.connect() .then(() => console.log('database connected')) .then(() => bootMyApplication()) .catch((e) => { console.error(e); // Always hard exit on a database connection error process.exit(1); }); 

उड़ान में होने पर आपका ऐप आसानी से कॉल कर get() जब उसे डीबी कनेक्शन की आवश्यकता होती है।

 const db = require('./myAwesomeDbModule'); db.get().find(...)... // I have excluded code here to keep the example simple 

यदि आप अपने डीबी मॉड्यूल को उसी तरीके से सेट अप करते हैं जैसे कि निम्नलिखित न केवल आपके पास यह सुनिश्चित करने का एक तरीका है कि आपका आवेदन तब तक बूट नहीं होगा जब तक आपके पास कोई डेटाबेस कनेक्शन न हो तो आपके पास अपने डेटाबेस कनेक्शन पूल तक पहुंचने का एक वैश्विक तरीका होगा जो त्रुटि होगी अगर आपके पास कनेक्शन नहीं मिला है

 // myAwesomeDbModule.js let connection = null; module.exports.connect = () => new Promise((resolve, reject) => { MongoClient.connect(url, option, function(err, db) { if (err) { reject(err); return; }; resolve(db); connection = db; }); }); module.exports.get = () => { if(!connection) { throw new Error('Call connect first!'); } return connection; } 

http://mongoosejs.com/docs/api.html

मुंगूस के स्रोत की जांच करें वे एक कनेक्शन खोलते हैं और इसे एक मॉडल ऑब्जेक्ट में बाँध करते हैं, जब मॉडल ऑब्जेक्ट की आवश्यकता होती है, तो डीबी को एक कनेक्शन बनाया जाता है। चालक कनेक्शन पूलिंग का ख्याल रखता है।

मैंने अपने कोड में कनेक्शन पूलिंग को कार्यान्वित करने के लिए कोड को नीचे लागू किया है ताकि यह मेरे प्रोजेक्ट में न्यूनतम कनेक्शन बना सके और उपलब्ध कनेक्शन का पुन: उपयोग करे।

 /* Mongo.js*/ var MongoClient = require('mongodb').MongoClient; var url = "mongodb://localhost:27017/yourdatabasename"; var assert = require('assert'); var connection=[]; // Create the database connection establishConnection = function(callback){ MongoClient.connect(url, { poolSize: 10 },function(err, db) { assert.equal(null, err); connection = db if(typeof callback === 'function' && callback()) callback(connection) } ) } function getconnection(){ return connection } module.exports = { establishConnection:establishConnection, getconnection:getconnection } /*app.js*/ // establish one connection with all other routes will use. var db = require('./routes/mongo') db.establishConnection(); //you can also call with callback if you wanna create any collection at starting /* db.establishConnection(function(conn){ conn.createCollection("collectionName", function(err, res) { if (err) throw err; console.log("Collection created!"); }); }; */ // anyother route.js var db = require('./mongo') router.get('/', function(req, res, next) { var connection = db.getconnection() res.send("Hello"); }); 

आपको सेवा के रूप में एक कनेक्शन बनाना चाहिए, फिर आवश्यकता पड़ने पर इसे पुनः उपयोग करना चाहिए

 // db.service.js import { MongoClient } from "mongodb"; import database from "../config/database"; const dbService = { db: undefined, connect: callback => { MongoClient.connect(database.uri, function(err, data) { if (err) { MongoClient.close(); callback(err); } dbService.db = data; console.log("Connected to database"); callback(null); }); } }; export default dbService; 

मेरा App.js नमूना

 // App Start dbService.connect(err => { if (err) { console.log("Error: ", err); process.exit(1); } server.listen(config.port, () => { console.log(`Api runnning at ${config.port}`); }); }); 

और जहाँ भी आप चाहते हैं वहां इसका उपयोग करें

 import dbService from "db.service.js" const db = dbService.db