多租户实现分类
既然多租户设计的难点在于隔离用户数据,又同时共享资源。那么可以根据用户数据的物理分离程度来进行分类。
分为三类:数据库(DataBase)、模式(Schema)、数据表(Table)。
分离数据库
分离数据库类型每个租户在物理上单独使用一个数据库,JDBC 会连接到不同的数据库上,并且使用不同的连接池。一般应用程序会为每个租户添加一个 JDBC 连接池,然后根据访问的租户信息选择使用对应的连接池。
分离模式
分离模式类型租户使用同一个数据库,但是分别创建一个模式(Schema)(“模式”是数据库的一个概念,这个翻译不是很好理解,下文本会使用 Schema 叙述)。这种类型下,不同租户使用的是不同 JDBC 连接池,和分离数据库类型一样。
值得一提的是,不同的数据库供应商对 Schema 的定义不同。MySQL 认为 Schema 和数据库在物理上同义,所以在MySQL中 Schema 和数据库概念上完全一致。
给表添加标识
这种类型下,应用会为每个区分租户的实体添加鉴别信息。租户共享数据库,Schema 和数据表,每个相关查询语句中都需要添加租户信息,才能得到正确的结果。这种类型提供了最少的数据隔离,但可以最大限度地共享了数据。从架构上讲,它是概念上最简单的方案,而将复杂性推到了应用程序中,使得管理租户数据变得比较困难。
数据量大的时候,单表压力较大!
以上内容截取自 Spring Boot JPA MySQL 多租户系统 Part1 - 基础实现
网上很多关于 jpa 多租户的 博客,写的水分很大,连 demo 都算不上! 最基本的创建表结构没有做!
创建表结构使用的是 liquibase ,创建租户时,自动生成 表结构