【问题标题】:organizing multi-tenant db/MySQL [SaaS]组织多租户数据库/MySQL [SaaS]
【发布时间】:2018-01-31 00:24:25
【问题描述】:

shopify 就是一个很好的例子。您有 N 个用户(在这种情况下,每个用户都假定站点)。每个用户在数据库中都有自己的记录。但 db 架构将是相同的(每个用户使用相同的表,products、customers、orders 等)。

那么问题是组织这种解决方案的最佳方式是什么? 将所有内容存储在一个数据库中,但存储在不同的表中,或者为每个用户运行单独的数据库(但随后会在维护、可扩展性和自动化方面存在问题)

可能的解决方案:

我们可以将一个数据库与products、customers、orders 等常用表一起使用。我们将有一个表users,在其中存储有关每个站点的记录。 在表products、customers 中,我们将按user_id 对所有记录进行分组。 这是可能的解决方案之一。但是如果我们有 1000 个用户(站点),每个用户将有大约 2k 的产品和大约 100k 的客户,我们最终会得到包含数百万条记录的表,所以问题将是:

  • 与每个用户(站点)拥有自己的数据库相比,它的表现如何?
  • 这种方法的可靠性如何?更大的数据,更难维护,备份/恢复
  • 安全,如果一个来源出现问题,成千上万的人将受到影响

任何链接等将不胜感激,谢谢!

【问题讨论】:

    标签: mysql database database-design architecture


    【解决方案1】:
    1. 为每个租户创建一个mysql用户
    2. 为每个表添加一个tenant_id 列
    3. 为基于tenant_id = mysql_user 过滤的每个表添加一个视图
    4. 使用触发器自动填充 INSERT 上的 tenant_id 列
    5. 限制租户 mysql 用户只能访问视图,不能访问原始表

    我写了一篇博客文章,介绍如何使用这种技术在周末将大型单租户 mysql 应用程序转换为多租户应用程序。 https://opensource.io/it/mysql-multi-tenant/

    【讨论】:

      【解决方案2】:

      我建议使用支持良好的开源解决方案查看数据库。考虑到这一点,我很快找到了一个非常简单的模式,它可以解释一个很好的工作解决方案,同时考虑到可扩展性。

      http://www.zentut.com/sql-tutorial/sql-sample-database/

      【讨论】:

      • 感谢您的回答!我扩展了我的问题,以便更清楚。
      猜你喜欢
      • 2021-07-10
      • 2012-09-24
      • 2014-07-15
      • 1970-01-01
      • 2022-01-11
      • 2016-10-19
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多