Mình chạy có 1 trang để viết code thôi mà tới 40 kết nối tới mongodb?



  • 0_1530196805354_image.png
    Mình thắt mắt kết nối này nó tính bằng kiểu gì?
    Nếu 1 người 40 kết nối vậy 20 người cùng lúc 800 kết nối vậy server ram 1G có ổn không?

    Đam mê công nghệ
    Không biết nhiều nhưng cũng muốn đóng góp

    0


  • @Kha-Pham Bạn có dùng 1 thư viên client nào không. Vì mongo sẽ dùng 1 thread tương ứng với 1 TCP socket connection được mở. Mà pooling của client chỉ config default là 5-10. Vậy thì > 5 - 10 thì bạn đã duplicate object connect -> duplicate thêm phần connect. (Còn cluster etc nữa)
    Ex:

    app có 1 node có 1 db connect object và không gọi file db connect nhiều lần -> connections = config poolsize ~ 5 connections
    app có n node (cluster) , mỗi node có 1 db connec object và file db connect chỉ được gọi 1 lần -> connections = config poolsize * cluster -> 5*n (n=4 nodes -> 20 connections)
    Trường hợp bad nhất: 
    1 node có m db object do import file nhiều lần và không bọc lại bằng 1 class và getter setter -> connections = m * poolsize ~ m * (5 hoặc 10). Lúc này ví dụ bạn implement db file tới 10 file model -> m = 10 -> connections cỡ 10 *5 = 50 connections. Tuy nhiên vẫn xảy ra nếu bạn dùng lượng lớn các truy vấn. Và việc đợi poolsize thì quá slow.
    
    

    Nếu bạn có sử dụng client libary mongodb nào thì nên đọc mục Pooling (poolsize, connection) để nắm rõ hơn.
    Ví dụ nodejs-mongo-native: db.connect -> tạo ra 1 object db. (pool đc quản lý behind the scene). Nhưng cái này không singleton. Do đó khi bạn import nhiều lần mà không wrap lại = singleton -> db object duplicate -> Tăng lượng poolsize bị duplicate -> tăng connections nhiều.

    Note:
    Limit connections của mongo là 2000.
    Avg per connection của mongo là 1mb
    https://github.com/Automattic/mongoose/issues/1172

    Sent from Rodgers Zone!!!

    2


  • @Nguyen-Hien cám ơn bạn đã trả lời mình. Mình chạy có 1 node và dùng thư viện mongosee. Chắc do mình import thư viện lung tung nên mới thế.
    Khi mình reset lại máy tính khởi động lại thì số kết nối giống như bạn nối

    Vừa khởi động node lên là số kết nối là 5
    Mở trình duyệt truy cập trang web thì tăng lên 8
    

    Đam mê công nghệ
    Không biết nhiều nhưng cũng muốn đóng góp

    0


  • @Kha-Pham Quên mất. Cách ez nhất để export ra singleton trong nodejs là:
    module.exports ấy =))). Đừng dùng export của es. Với nữa nếu muốn an toàn hơn thì đưa lên biến global như bên golang dùng. =))

    Sent from Rodgers Zone!!!

    0


  • @Nguyen-Hien Đây là file kết nối mongodb của mình. mình lấy nó trên mạng. mình require nó 1 lần ở app là chạy ngon lanh

    const mongodb = require('mongoose');
    const config = require('./../../config/config');
    mongodb.connect(config.connectdb).then(()=>console.log('connect success mongo'));
    
    mongodb.Promise = global.Promise;
    var db = mongodb.connection;
    mongodb.set('debug', true);
    db.on('error', console.error.bind(console, 'MongoDB connection error:'));
    
    

    Đam mê công nghệ
    Không biết nhiều nhưng cũng muốn đóng góp

    0


  • @Kha-Pham Yup. Nếu require 1 lần thì sẽ ok nhé.

    Sent from Rodgers Zone!!!

    1

Log in to reply