组织多租户db/MySQL[SaaS]

组织多租户db/MySQL[SaaS],mysql,database,database-design,architecture,Mysql,Database,Database Design,Architecture,shopify就是一个很好的例子。其中,您有N个用户(在本例中,每个用户假定为站点)。每个用户在数据库中都有自己的记录。但db模式将是相同的(每个用户的表相同,产品,客户,订单等) 所以问题是,组织这种解决方案的最佳方式是什么? 将所有内容存储在一个数据库中,但存储在不同的表中,或者为每个用户运行单独的数据库(但在维护、可伸缩性和自动化方面会有问题) 可能的解决办法: 我们可以将一个DB用于常见的表,如产品,客户,订单等,我们将有表用户存储每个站点的记录。 在表产品,客户中,我们将根据用户id对

shopify就是一个很好的例子。其中,您有N个用户(在本例中,每个用户假定为站点)。每个用户在数据库中都有自己的记录。但db模式将是相同的(每个用户的表相同,
产品
客户
订单
等)

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

可能的解决办法: 我们可以将一个DB用于常见的表,如
产品
客户
订单
等,我们将有表
用户
存储每个站点的记录。 在表
产品
客户
中,我们将根据
用户id
对所有记录进行分组。 这是可能的解决办法之一。但如果我们有1000个用户(站点),每个用户将有约2k个产品和约100000个客户,那么我们最终可以得到拥有数百万条记录的表格,因此问题将是:

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

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

我建议通过受良好支持的开源解决方案查看数据库。考虑到这一点,我很快找到了一个非常简单的模式,它可以解释一个很好的解决方案,考虑到可伸缩性


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

  • 为每个租户创建一个mysql用户
  • 向每个表中添加租户id列
  • 为每个根据租户id=mysql\U用户进行筛选的表添加一个视图
  • 使用触发器在插入时自动填充租户id列
  • 限制租户mysql用户仅访问视图,而不是原始表
  • 我写了一篇博客文章,介绍了如何在周末使用这种技术将大型单租户mysql应用程序转换为多租户应用程序。

  • 为每个租户创建一个mysql用户
  • 向每个表中添加租户id列
  • 为每个根据租户id=mysql\U用户进行筛选的表添加一个视图
  • 使用触发器在插入时自动填充租户id列
  • 限制租户mysql用户仅访问视图,而不是原始表
  • 我写了一篇博客文章,介绍了如何在周末使用这种技术将大型单租户mysql应用程序转换为多租户应用程序。

    谢谢你的回答!我扩展了我的问题,所以它会更清楚。谢谢你的回答!我扩展了我的问题,这样问题会更清楚。