多租户SaaS平台的数据库方案

1.1 多租户是什么

多租户技术(Multi-TenancyTechnology)又称多重租赁技术:是一种软件架构技术,是实现如何在多用户环境下 (此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用户间数据的隔离性。简单讲: 在一台服务器上运行单个应用实例,它为多个租户(客户)提供服务。从定义中我们可以理解:多租户是一种架 构,目的是为了让多用户环境下使用同一套程序,且保证用户间数据隔离。那么重点就很浅显易懂了,多租户的重 点就是同一套程序下实现多用户数据的隔离

1.2 需求分析

传统软件模式,指将软件产品进行买卖,是一种单纯的买卖关系,客户通过买断的方式获取软件的使用权,软件的 源码属于客户所有,因此传统软件是部署到企业内部,不同的企业各自部署一套自己的软件系统
Saas模式,指服务提供商提供的一种软件服务,应用统一部署到服务提供商的服务器上,客户可以根据自己的实际 需求按需付费。用户购买基于WEB的软件,而不是将软件安装在自己的电脑上,用户也无需对软件进行定期的维护 与管理

在SaaS平台里需要使用共用的数据中心以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍可 以保障客户的数据正常使用。由此带来了新的挑战,就是如何对应用数据进行设计,以支持多租户,而这种设计的 思路,是要在数据的共享、安全隔离和性能间取得平衡。

1.3 多租户的数据库方案分析

目前基于多租户的数据库设计方案通常有如下三种:

  • 独立数据库 共享数据库
  • 独立 Schema 共享数据库
  • 共享数据表

1.3.1 独立数据库

独立数据库:每个租户一个数据库。

  • 优点:为不同的租户提供独立的数据库,有助于简化数据模型的扩展设计,满足不同租户的独特需求;如果 出现故障,恢复数据比较简单。
  • 缺点: 增多了数据库的安装数量,随之带来维护成本和购置成本的增加

这种方案与传统的一个客户、一套数据、一套部署类似,差别只在于软件统一部署在运营商那里。由此可见此方案 用户数据隔离级别高,安全性好,但是成本较高

1.3.2 共享数据库、独立 Schema

(1) 什么是Schema oracle数据库:在oracle中一个数据库可以具有多个用户,那么一个用户一般对应一个Schema,表都是建立 在Schema中的,(可以简单的理解:在oracle中一个用户一套数据库表)

  • mysql数据库:mysql数据中的schema比较特殊,并不是数据库的下一级,而是等同于数据库。比如执行 create schema test 和执行create database test效果是一模一样的

共享数据库、独立 Schema:即多个或所有的租户使用同一个数据库服务(如常见的ORACLE或MYSQL数据库), 但是每个租户一个Schema。

  • 优点: 为安全性要求较高的租户提供了一定程度的逻辑数据隔离,并不是完全隔离;每个数据库可支持更多 的租户数量。
  • 缺点: 如果出现故障,数据恢复比较困难,因为恢复数据库将牵涉到其他租户的数据; 如果需要跨租户统计 数据,存在一定困难。

这种方案是方案一的变种。只需要安装一份数据库服务,通过不同的Schema对不同租户的数据进行隔离。由于数 据库服务是共享的,所以成本相对低廉。

1.3.3 共享数据库、共享数据表

共享数据库、共享数据表:即租户共享同一个Database,同一套数据库表(所有租户的数据都存放在一个数据库 的同一套表中)。在表中增加租户ID等租户标志字段,表明该记录是属于哪个租户的。

  • 优点:所有租户使用同一套数据库,所以成本低廉。
  • 缺点:隔离级别低,安全性低,需要在设计开发时加大对安全的开发量,数据备份和恢复困难。这种方案和基于传统应用的数据库设计并没有任何区别,但是由于所有租户使用相同的数据库表,所以需要做好对 每个租户数据的隔离安全性处理,这就增加了系统设计和数据管理方面的复杂程度。

原文地址:https://www.cnblogs.com/niuben/p/11063731.html

时间: 2024-10-08 10:34:26

多租户SaaS平台的数据库方案的相关文章

多租户SaaS的数据库设计模式

前言 在设计多租户SaaS应用程序时,您必须仔细选择最适合您应用程序需求的租户模型.租户模型确定每个租户的数据如何映射到存储.您选择的租户模式会影响应用程序设计和管理.以后切换到另一个模型有时代价昂贵. 关于可选择的租户模型的讨论如下. A,怎么选择一个合适的租户模型 一般来说,租赁模式不会影响应用程序的功能,但它可能会影响整体解决方案的其他方面.以下标准用于评估每个模型: 可扩展性(Scalability) 租户的数量级 每个租户的存储级别 整体存储 工作负载 租户隔离性(Tenant iso

Linux同平台Oracle数据库整体物理迁移

Linux同平台数据库整体物理迁移需求:A机器不再使用,要将A机器的Oracle迁移到B机器.之前写过类似需求的文章: http://www.linuxidc.com/Linux/2015-05/117556.htm本文这次旨在更多用到自动化通用的整合脚本去实现同平台的数据库整体迁移.1.A机器操作 2.B机器操作 A机器操作 0.系统版本:[[email protected] tmp]# uname -aLinux DB-A 2.6.32-358.el6.x86_64 #1 SMP Tue J

Linux平台QT数据库编程(来自网络)

Linux平台QT数据库编程 在linux平台使用qt来编写GUI程序,在进行数据库编程的时候,有两种选择方式,分别是:基于linux平台的数据库接口函数编程,另一种是使用qt自带的有关数据库类.那在这里我分别来讲一下这两种方式的实现. 一.使用linux平台的数据库接口编程: 在这里我使用的是一款免费的数据库sqlite,从网络上下一个sqlite-3.0.8.tar.gz源码包,然后进行安装,安装好后就可以使用它提供的函数接口.接下来我们用安装好的sqlite提供的函数接口,在QT中使用的,

基于SSH的车票预订网-java车票预订平台mysql数据库

基于SSH的车票预订网-java车票预订平台mysql数据库 1.包含源程序,数据库脚本.代码和数据库脚本都有详细注释.2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善开发环境:Eclipse ,MYSQL,JDK1.7,Tomcat 7涉及技术点:MVC模式.SpringMvc.Hibernate.Spring.HTML.JavaScript.CSS.JQUERY.DWR.Ajax等系统采用Hibernate框架实现ORM对象关系映射,前台JSP实现,后台springMvc映射,使用S

TDH大数据平台数据入库方案

一.数据入库方式 目前批量数据入库TDH大数据平台主要有如下几种方式 1.手工入录 一些静态表手工维护的数据,可以直接采用insert导入,或者使用waterdrop客户端工具导入,只适用少数据量的导入和更新 2.dblink TDH inceptor支持建立dblink直接连接db2,oracle,mysql等关系数据库,对于一些数据量不大的静态表,手工维护的表,可以通过建立dblink的方式获取数据 优点:简单方便 缺点:1)对大数据量的表,效率较差 2)初次使用相应数据库的dblink时,

直播平台的数据库架构演变

8月24日,阿里云数据库技术峰会到来,本次技术峰会邀请到了阿里集团和阿里云数据库老司机们,为大家分享了一线数据库实践经验和技术干货.在本次峰会上,特邀嘉宾映客直播架构师王振涛分享了映客直播作为创业公司从0至日活千万的数据库架构变迁,数据库在直播中的经典应用场景,数据库存储的优化思路,以及如何构建一个高可用数据库架构. 以下内容根据演讲嘉宾现场视频以及PPT整理而成. 本次分享的内容将主要围绕以下四个部分: 一.映客直播发展历程 二.直播遇上云数据库 三.风口上的数据库架构变迁 四.直播典型应用场

慢病管理平台定制化方案

慢病管理行业软件解决方案介绍 随着日益改善的生活条件,人们对于健康问题愈加重视,而慢病管理作为一项细致活,并不完全适合在病患数量庞大的 医院进行,所以就需要更多的慢病管理机构以及科学完善的慢病管理平台来填补这一空白. 安莫比科技慢病管理服务平台是线上线下相结合,集线下医疗检测.线上医患服务于一体的综合性解决方案,互联网医疗的最佳实践 整个慢病管理平台能力矩阵主要分为以下6个部分: 实时监测:由业务方定义需要进行监测的慢病指标,像血糖.血压.体重.INR等,然后配置自定义规则,很多慢病指标并不是一

Unity3D手游开发日记(1) - 移动平台实时阴影方案

阴影这个东西,说来就话长了,很多年前人们就开始研究出各种阴影技术,但都存在各种瑕疵和问题,直到近几年出现了PSSM,也就是CE3的CSM,阴影技术才算有个比较完美的解决方案.Unity自带的实时阴影,也是这种技术,在电脑上很成熟的.我也是目睹了阴影技术的发展,以前也自己写过一些阴影,本来以为以后再也不用担心阴影了,结果做移动游戏以后,发现情况没那么乐观.这种基于深度的shadow map 技术,需要浮点纹理的支持,但有的移动平台不支持浮点纹理,即使支持,这种技术开销也特别大.所以我们需要重新思考

[转]NopCommerce 多数据库方案

本文转自:http://www.cnblogs.com/YUTOUYUWEI/p/5538200.html 有时候一个项目需要连接多个数据库,以实现不同数据库的数据在同个项目的共享. 如果已经安装了nop,则需要在第二个数据库新建一个表,nop现在无法自动通过迁移来实现第二个或者更多数据库,所以这点需要我们手动去操作. 1.在SQLServer新建一个数据库,我这里新建的是TestDb,表为TestTable. USE [TestDb] GO SET ANSI_NULLS ON GO SET Q