【问题标题】:Proper Implementation of Multi Tenancy in Node Application节点应用中多租户的正确实现
【发布时间】:2020-05-03 13:18:02
【问题描述】:

我目前必须决定如何以最佳方式使用我的节点应用程序实现多租户。 现在,我有我的 common_db_connection,我有一个查找表,我可以在其中查询每个特定用户的租户数据库名称。

我有一个解析器函数,它使用用户 ID 来获取租户数据库名称,最后返回我的 mysql 连接器。

我的解决方案如下所示:

var conn_common_db  = mysql.createPool({
    connectionLimit : 150,
    host     : 'localhost',
    user     : 'root',
    password : '',
    database : 'common_db'
});

function conn_resolver(req) {

    conn_common_db.query("SELECT tenant_db_name from tenants where tenant_uid = (SELECT tenant_uid from tenant_user where user_uid = ?)",
     [requst.session.user_uid], function(err, result) {

        if(!err) {
            tenant_db_name = result[0].tenant_db_name

            return mysql.createPool({
                connectionLimit : 150,
                host     : 'localhost',
                user     : 'root',
                password : '',
                database : tenant_db_name
            });
        }
        else{
            console.log(err)
            return null;
        }
    })
}

app.get('/', function(request, response) {

    conn_resolver(req).query("SELECT *  FROM user", function(err, result) {
        if(!err) {
            console.log(result)
        }
        else{
            //res.send(err)
        }
    })

});

这是正确的做法吗?这样做是否安全?

提前致谢!

【问题讨论】:

  • 恕我直言,作为实现多租户的方法之一,它很好

标签: mysql node.js multi-tenant saas


【解决方案1】:

其实没有。您要么需要为每个租户设置一个池,要么每次只设置一个单独的连接。

池的概念是拥有一个已经连接到数据库的可重用连接。下一个租户将连接到错误的数据库。因此,当每个租户尝试连接到他们的数据库时,您将不得不重新创建池。您可以为每个租户创建一个池,或者只是即时进行连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多