一、多租户在数据存储上存在三种主要的方案,分别是:

1. 独立数据库

这是第一种方案,即一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本较高。
  优点:
    为不同的租户提供独立的数据库,有助于简化数据模型的扩展设计,满足不同租户的独特需求;如果出现故障,恢复数据比较简单。
  缺点:
    增多了数据库的安装数量,随之带来维护成本和购置成本的增加。
  这种方案与传统的一个客户、一套数据、一套部署类似,差别只在于软件统一部署在运营商那里。如果面对的是银行、医院等需要非常高数据隔离级别的租户,可以选择这种模式,提高租用的定价。如果定价较低,产品走低价路线,这种方案一般对运营商来说是无法承受的。

2. 共享数据库,独立 Schema

这是第二种方案,即多个或所有租户共享Database,但是每个租户一个Schema(也可叫做一个user)。底层库比如是:DB2、ORACLE等,一个数据库下可以有多个SCHEMA
  优点:
    为安全性要求较高的租户提供了一定程度的逻辑数据隔离,并不是完全隔离;每个数据库可支持更多的租户数量。
  缺点:
    如果出现故障,数据恢复比较困难,因为恢复数据库将牵涉到其他租户的数据;
  如果需要跨租户统计数据,存在一定困难。

3. 共享数据库,共享 Schema,共享数据表

这是第三种方案,即租户共享同一个Database、同一个Schema,但在表中增加TenantID多租户的数据字段。这是共享程度最高、隔离级别最低的模式。
  即每插入一条数据时都需要有一个客户的标识。这样才能在同一张表中区分出不同客户的数据。
  优点:
    三种方案比较,第三种方案的维护和购置成本最低,允许每个数据库支持的租户数量最多。
  缺点:
    隔离级别最低,安全性最低,需要在设计开发时加大对安全的开发量; 数据备份和恢复最困难,需要逐表逐条备份和还原。

如果希望以最少的服务器为最多的租户提供服务,并且租户接受牺牲隔离级别换取降低成本,这种方案最适合。
    
  在SaaS实施过程中,有一个显著的考量点,就是如何对应用数据进行设计,以支持多租户,而这种设计的思路,是要在数据的共享、安全隔离和性能间取得平衡。

因为我们用的底层库是MySQL,且要保证数据的完全隔离,所以用的方案属于第一种。独立数据库。因为MySQL下SCHEMA就是他的数据库名。所以每多服务一个用户,都需要新建一个数据库。如果是DB2或者是ORACLE的话,一个数据库下,可以采用独立的SCHEMA来进行数据隔离,这样会相对节省成本,且数据隔离的强度高。

二、选择合理的实现模式

衡量三种模式主要考虑的因素是隔离还是共享。

1. 成本角度因素

隔离性越好,设计和实现的难度和成本越高,初始成本越高。共享性越好,同一运营成本下支持的用户越多,运营成本越低。

安全因素

要考虑业务和客户的安全方面的要求。安全性要求越高,越要倾向于隔离。

从租户数量上考虑

主要考虑下面一些因素
    系统要支持多少租户?上百?上千还是上万?可能的租户越多,越倾向于共享。
    平均每个租户要存储数据需要的空间大小。存贮的数据越多,越倾向于隔离。
    每个租户的同时访问系统的最终用户数量。需要支持的越多,越倾向于隔离。
    是否想针对每一租户提供附加的服务,例如数据的备份和恢复等。这方面的需求越多, 越倾向于隔离

技术储备

共享性越高,对技术的要求越高。

多租户数据隔离的三种方案相关推荐

  1. 实战saas系统多租户数据隔离(三)每个租户使用独立的表空间

    目录 0. 前言 1. 需求分析 2. 系统架构设计 3. 环境准备 4. 编码实现 4.1 添加父项目依赖坐标 4.2 实现eureka注册中心 4.3 实现zuul网关 4.4 实现用户微服务mt ...

  2. mongo数据同步的三种方案

    (一)直接复制data目录(需要停止源和目标的mongo服务) 1.针对目标mongo服务已经存在,并正在运行的(mongo2-->mongo). 执行步骤: (1).停止源/目标服务器的mon ...

  3. Docker 数据持久化的三种方案

    容器中的数据可以存储在容器层.但是将数据存放在容器层存在以下问题: 数据不是持久化.意思是如果容器删除了,这些数据也就没了 主机上的其它进程不方便访问这些数据 对这些数据的I/O会经过存储驱动,然后到 ...

  4. sql优化之:数据库索引创建原则,or/in/union与索引优化,聚集索引/非聚集索引/联合索引/索引覆盖,MySQL冗余数据的三种方案,MySQL双主一致性架构优化(来源:架构师之路)

    一.一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好 ...

  5. mysql数据冗余_MySQL冗余数据的三种方案

    一,为什么要冗余数据 互联网数据量很大的业务场景,往往数据库需要进行水平切分来降低单库数据量. 水平切分会有一个patition key,通过patition key的查询能够直接定位到库,但是非pa ...

  6. 租户隔离怎么做MYSQL_一种SaaS软件租户数据隔离的方法与流程

    本发明涉及计算机技术领域,尤其涉及一种SaaS软件租户数据隔离的方法. 背景技术: SaaS是Software-as-a-Service的简称,随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴 ...

  7. 解决秒杀系统超卖问题的三种方案

    在秒杀系统设计中,超卖是一个经典.常见的问题,任何商品都会有数量上限,如何避免成功下订单买到商品的人数不超过商品数量的上限,这是每个抢购活动都要面临的难点. 一.问题描述 在多个用户同时发起对同一个商 ...

  8. 【Win 10 应用开发】文件读写的三种方案

    本文老周就跟伙伴们探讨一下关于文件读写的方法.总得来说嘛,有三种方案可以用,而且每种方案都各有特色,也说不上哪种较好.反正你得记住老祖宗留给我们的大智慧--事无定法,灵活运用者为上. OK,咱们开始吧 ...

  9. 数据脱敏的 6 种方案

    一.什么是数据脱敏 英文全称:Data Masking . 先来看看什么是数据脱敏?数据脱敏也叫数据的去隐私化,在我们给定脱敏规则和策略的情况下,对敏感数据比如 手机号.银行卡号 等信息,进行转换或者 ...

最新文章

  1. CDN服务技术架构图
  2. vbs劫持快捷键并执行程序
  3. Quartz实现动态定时任务
  4. 百度的索引真的比雅虎多么?
  5. eclipse简单使用
  6. 机器学习中的矩阵分析与应用
  7. 计算机专业里有服装设计吗,-------- 学服装设计有前途吗?
  8. 迅捷会员管理系统v1.7免费版正式发布了-为创业而生
  9. 实对称矩阵性质的数学证明
  10. lubuntu输入法设置_Ubuntu 设置中文输入法
  11. 环境微生物学练习题及答案
  12. 目标检测单阶段、双阶段检测框部分学习总结
  13. navigator for mysql_SQL Navigator 7
  14. esp8266 NVS_FLASH 应用指南
  15. 使用OpenGL实现场景构建
  16. 奇异值分解的定义及应用
  17. iOS实现浮动泡泡功能,悬浮泡泡,windows系统屏幕保护程序的气泡功能(碰撞检测)
  18. AlphaStar再升级:多智能体强化学习玩《星际争霸2》,排名超99.8%人类玩家
  19. 仪器控制 之 GPIB总线
  20. 让你在游戏中闻到丝袜味,VAQSO VR完成400万元融资

热门文章

  1. NLP入门(八)使用CRF++实现命名实体识别(NER)
  2. 虚幻4 游戏引擎(二):蓝图教学
  3. Qt 之QNetworkAccessManager 下载断点续传
  4. IMS QTI 实践指南 | 01 简单题型 Simple Items
  5. Jenkins教程(六)脚本与方法执行效果不合预期,如何及时中止pipeline
  6. html 判断text相等,实用的28个js验证
  7. Quartz任务调度——快速入门
  8. 人工智能面试总结:160个机器学习面试题,赶紧先考考自己!
  9. 十六宫格拼图(A*/IDA*)(曼哈顿距离)
  10. 移动端购房工具--汇率计算的实现