[Mongodb] Hỏi về việc disconnect mongodb


  • Angel

    Theo mình được biết thì các kết nối đến Database sẽ được thiết lập khi có request vào đóng khi xong request đó. Nhưng các dự án mà mình từng tham gia dường như chỉ cần kết nối đến server là tự động mở connection luôn (và không thấy đóng).

    Vậy mình muốn hỏi là thằng nodejs (hay mongoose) có cơ chế tự đóng connection à?, hay thiết kế hiện tại không đóng thôi. Và nếu muốn thiết lập mở/đóng conenction thì đặt 2 hàm này ở đâu trong thiết kế.

    Mình xin cảm ơn ạ!



  • @Nos-Gnoh
    Việc này tùy thuộc bạn config pool. Thường pool db có 2 thông số min and max
    Nếu min > 0 thì lúc nào cunxg sẽ có ít nhất min connection keep.

    Nó có hàm để bạn open new connection mới. Hàm này thì bạn đẻ tùy theo logic dự án của bạn thôi. Cái này về phần db. Nên mình vote để ở model base. Hoặc gateway với DB

    Sent from Rodgers Zone!!!

    1


  • mongoose thì bạn có thể tham khảo cơ chế autoReconnectreconnectTries nhé


  • Angel

    @Nguyen-Hien e thấy hơi khó hình dung tí. Hiện tại em đang thiết kế như này: 0_1540797224832_image.png

    Lúc trước cũng thấy nó hơi sida muốn chuyển qua model nhưng k biết chuyển thế nào. Vì đang muốn mở connection ở mỗi request và close luôn sau request đó.


  • Angel

    @Bảo-Trần-Sỹ cái này hình như là tự động connect lại db ạ?.
    Mình đang muốn là mở connection ở mỗi request và close luôn sau request đó. Có hàm nào kiểu đó k nhỉ?




  • Angel

    @Bảo-Trần-Sỹ ừm mình cũng đang sử dụng hàm disconnect và mọi thứ diễn ra bình thường rồi, nhưng cái mình muốn hỏi ở đây là đặt phần connect và disconnect db ở đâu cho hợp lý, vì như hình ở trên thì mình thấy thiết kế nó hơi rườm rà. Bạn có tài liệu hay link tham khảo nào về phần này k ạ?



  • @Nos-Gnoh Thường theo mình thấy ko ai cứ để trong chỗ gateway mình query đâu. Bạn nên để trong cái hook default cảu cả hệ thống modle bạn á. Mỗi lần có 1 action nào dó với db thfi init connection . Sau đó thì close. Nó work behind the scene thôi. Chứ như trên bạn viết sẽ rất nhiều chỗ. Rồi nhiều lúc quên. Etc =.=. Lỡ chả may cú pháp thay đổi. Cách tiếp cận mới. Sưa cũng bèo bèo 50 chỗ =))

    Sent from Rodgers Zone!!!

    0

  • Angel

    @Nguyen-Hien vâng thì em đang nghĩ vậy nên mới thắc mắc đấy ạ. Nhưng k biết implement cái đó thế nào, a có tài liệu nào về phần này hay có thể chỉ rõ cho e được k ạ. E cảm ơn ạ :))



  • @Nos-Gnoh
    Ý tưởng ở đây mình sẽ dùng 1 pool để chưa connection tới MongoDB. Nó sẽ làm nhiệm vụ quản lý dùm mình. Mình chỉ cần thực hiện các lệnh như insert, find, update...
    Mình asume là bạn dùng: https://github.com/mongodb/node-mongodb-native
    Ý tưởng của mình thì lấy từ bài viết này: https://www.compose.com/articles/connection-pooling-with-mongodb/

    Code chính

    // This is a global variable we'll use for handing the MongoDB client
    var mongodb;
    
    // Connection URL
    var url = '[connectionString]';
    
    // Create the database connection
    MongoClient.connect(url, {  
      poolSize: 10
      // other options can go here
    },function(err, db) {
        assert.equal(null, err);
        mongodb=db;
        }
    );
    
    global.mongodb = mongodb
    

    Ở 1 file khác thì dùng sẽ là

    const mongodb = global.mongodb
    // Use the connect method to connect to the server when the page is requested
    app.get('/', function(request, response) {  
        mongodb.listCollections({}).toArray(function(err, collections) {
            assert.equal(null, err);
            collections.forEach(function(collection) {
                console.log(collection);
            });
        })
        response.send('See console for a list of available collections');
    });
    

    Sent from Rodgers Zone!!!

    2

  • Angel

    @Nguyen-Hien okay thank a ạ, để e nghiên cứu thử



  • @Nos-Gnoh Yup. Thử đi bạn. Nói chung nên dùng pool để manage connection. Do tương lại nếu có cluster thì mình luôn kiểm soát đc lượng connect đến DB mà tính toán cluster.

    Sent from Rodgers Zone!!!

    0


  • @Nos-Gnoh Bạn có thể cho mình xin email mình hỏi bạn chút được không


Log in to reply