组织多租户db / MySQL [SaaS]

时间:2017-08-22 16:00:14

标签: mysql database database-design architecture

很好的例子将是shopify。你有N个用户的地方(在这种情况下每个用户都假设网站)。并且每个用户都将拥有自己在DB中的记录。但是db模式将是相同的(每个用户使用相同的表,productscustomersorders等。)

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

可能的解决方案:

我们可以将一个数据库与productscustomersorders等公共表格一起使用。我们将在表格users中存储有关每个网站的记录。 在表productscustomers中,我们将按user_id对所有记录进行分组。 这是可能的解决方案之一。但是,如果我们将拥有1000个用户(站点),每个将拥有约2k个产品,并且~10万个客户,我们最终会得到具有数百万条记录的表格,因此问题将是:

  • 与每个用户(网站)相比,它将如何执行将拥有自己的数据库?
  • 这种方法有多可靠?更大的数据,更难维护,备份/恢复
  • 安全,如果一个来源的错误会影响数千人

任何链接等都将非常感谢,谢谢!

2 个答案:

答案 0 :(得分:1)

我建议通过支持良好的开源解决方案来审查数据库。考虑到这一点,这里有一个非常简单的模式,我发现它非常快,可以解释一个良好的工作解决方案,并考虑到扩展能力。

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

答案 1 :(得分: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/