看到一篇比较多租户数据隔离方案的文章,总结挺不错。其实大部分内容在我前几年写的文章都有。
文章翻译自:
https://blog.arkency.com/comparison-of-approaches-to-multitenancy-in-rails-apps/
多租户意味着同一个应用上有不用的用户隔离。这是非常典型的saas模型。你可以用不同的隔离级别来实现多租户。
1. 行级别: 在每个数据库表里添加tenat_id字段,然后在每个查询语句也添加相应的tenant_id
2. schema 级别: 每个租户有在同一个数据库内自己独立命名空间。 可以容易使用 PostgreSQL schemas 来实现. 后续会介绍使用Mysql如何实现。
3. 数据库级别:每个租户创建独立的数据库。 非常少用到。
下面是比较这几种实现方式的优缺点:
MySQL vs PostgreSQL schemas
Mysql没有类似PostgreSQL schemas功能,但Mysql数据库可以实现类似方式使用。切换数据库时候不需要创建独立数据库连接,在Mysql可是通过use 语句来选择数据库。类型在 PG数据库使用search_path功能。类似方案,可以在表名前在租户数据库前缀。
Mysql缺点:是你需要保证数据库间没有名字冲突。创建租户时候,需要有创建数据库的权限。如果你没有需要。而PG只需要在当前数据库创建schemas的权限,并且不用关系名字冲突。即使在托管的数据库服务,也能很方便实现。
快速方案选择: