【问题标题】:providing the right sequelize.js object to connect to the database(multi-tenant application)提供正确的 sequelize.js 对象以连接到数据库(多租户应用程序)
【发布时间】:2014-05-14 21:19:05
【问题描述】:

先介绍一下背景:

我们正在尝试创建一个多租户应用程序,我们考虑先使用mean stack 并为每个租户创建多个集合(例如 order_tenant1、order_tenant2 等),然后我们浏览了一些反对此的博客方法,其次我们觉得事务的需要是我们数据库的核心要求,因此我们向 RDBMS lke mysql 和 mariaDB 开放了我们自己,我们偶然发现了一个blog,它详细解释了该方法,它说创建视图以获得,更新和插入与租户和视图参数相关的数据将通过连接字符串定义,因为我们使用的是 node.js 我发现 ORM for mysql sequelizejs 非常好。

实际问题:

根据我对平均堆栈的经验,我们在 server.js 文件中定义了 mongo 连接,应用程序在应用程序启动时建立这些连接并保持它们处于活动状态, 我怎样才能让多个 sequelizejs(或就此而言和数据库连接)对象根据属于特定租户的用户连接到数据库,并为应用程序提供正确的对象以继续执行业务逻辑

1)我应该在应用程序收到的每个请求上创建一个新的连接对象,然后在处理请求后关闭它吗?

2) 或者有没有更好的方法在 node、express 或 sequelizejs 中处理这个问题!?

编辑: 我们已决定使用包含tenant_id 作为列的基于行的方法,如blog above 中所述,但我正在努力解决如何通过sequelizejs 对象维护与数据库的直接连接对象,即id 属于租户id 的用户: 1向应用程序发送一个请求,他需要使用一个对象说“db”,该对象是一个sequelize对象,用于与使用租户ID 1在其连接字符串中的详细信息创建的数据库进行通信,对于属于租户ID的用户也是如此: 2 它需要使用相同的对象(即“db”)提供服务,但必须使用其连接字符串中的租户 ID 2 的详细信息创建它,因为我想为我必须服务的每个租户维护不同的连接字符串(数据库连接对象)。

【问题讨论】:

    标签: mysql express mongoose sequelize.js mean-stack


    【解决方案1】:

    多租户可以实现为基于行、基于模式或基于数据库。除了 2010 年的那篇文章,我认为您会发现很少有其他关于执行数据库支持的多租户的建议。系统的设计初衷不是为了与数以万计或数以千计的数据库通信,所以事情会一直在你身上失败。您要避免的基本事情是泄露其他用户数据的 SQL 注入攻击,但避免这些攻击的正确方法是清理用户输入,无论如何您都需要这样做。

    我强烈建议使用普通的基于行的多租户方法,而不是基于模式的方法,如 https://devcenter.heroku.com/articles/heroku-postgresql#multiple-schemas 和这篇原始文章中所述:http://railscraft.tumblr.com/post/21403448184/multi-tenanting-ruby-on-rails-applications-on-heroku

    更新:

    您更新后的问题仍然不清楚基于数据库和基于行的多租户之间的区别。你想做基于行的。这意味着您可以像示例一样设置单个 Sequelize 连接字符串,因为您将只有一个数据库。

    然后,您对数据库的查询将如下所示:

    User.find({ userid: 538 }).complete(function(err, user) {
      console.log(user.values)
    })
    

    多租户由userid 属性提供。我会敦促您在开始之前多阅读有关数据库、ORM 和典型模式的内容。我认为当您不完全了解 ORM 通常如何工作时,您会发现与开始开发相比,您会发现额外的前期投资来支付红利。

    【讨论】:

    • 我想我不清楚我问的问题,我已经更新了我的问题,请通过“已编辑”部分了解更多详细信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2015-01-09
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2017-08-01
    相关资源
    最近更新 更多