看到一篇比较多租户数据隔离方案的文章,总结挺不错。其实大部分内容在我前几年写的文章都有。
文章翻译自:
多租户意味着同一个应用上有不用的用户隔离。这是非常典型的saas模型。你可以用不同的隔离级别来实现多租户。
1. 行级别: 在每个数据库表里添加tenat_id字段,然后在每个查询语句也添加相应的tenant_id
2. schema 级别: 每个租户有在同一个数据库内自己独立命名空间。 可以容易使用 PostgreSQL schemas 来实现. 后续会介绍使用Mysql如何实现。
3. 数据库级别:每个租户创建独立的数据库。 非常少用到。
下面是比较这几种实现方式的优缺点:
行级别schema级别db级别
租户创建时间
⚡️ 新增一条记录
🐢 慢 (需要创建schema和表 )
🐌 非常慢 + 可能需要运维支持
租户间泄漏数据风险
💥 忘记添加 WHERE
✅ 比较安全
✅ 非常安全
侵入性
🍝 所有代码需要添加tenant_id 列条件
👍 一般
👍 非常少
Need shared tables or merging data across tenants
不同租户间共享和合并数据
✅ 没任何问题
👍sql可以跨数据查询
🚫 sql无法实现,只能应用代码实现
Running DB migrations
数据库迁移
⚡️ O(1)
🐢