本文参考自官方文档

多租户架构

作为云计算平台的先驱,Salesforce最大的特点是“软件即服务”(Software as a Service,Saas)。实现这种技术的基础便是“多租户架构”(Muntitenancy)。

定义引自维基百科:

多租户技术(英语:multi-tenancy technology)或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。

这种架构的优点在于:

  • 所有的用户高效共享所有的资源
  • 用户的资源之间不会互相影响

多租户架构的核心——元数据驱动

Salesforce多租户架构的核心是元数据驱动。不同于传统的关系数据库结构,Force.com中的对象、字段等并没有存储在实际的、静态的数据表中。在Force.com中,这些对象、字段等由元数据定义,在运行时动态编译生成。

Force.com中定义了一个全局数据字典(Universal Data Dictionary,简称UDD)。在UDD中存储了各种逻辑数据,包括但不限于:

  • 对象(Object),相当于传统关系数据库中的数据表
  • 字段(Field),相当于传统关系数据库中的字段
  • 数据库触发器(Database Trigger)
  • 存储过程(Stored Procedure)

举个例子。当用户创建了一个对象,比如“地址”,Force.com并不会真正的创建一个名为“地址”的数据表,而是将“地址”对象的定义保存为元数据。在运行时,系统会读取“地址”的定义,然后将其动态编译成“地址”对象,供用户使用。

这样做的好处是当用户需要修改对象定义时,在Force.com的后台不需要修改某个数据表的结构,而只是修改数据表中的某一条记录,让整个过程变得高效、稳定。

与此同时,Force.com中也使用了许多复杂的缓存技术来缓存诸多元数据,从而提高系统的效率。

元数据存储的数据模型

Force.com中使用诸多数据表来存储元数据和其他数据及关系。在实际的系统中它们有着复杂的名字和定义。为了描述方便起见,在下文将它们的名称做简化,着重描述它们的功能。

  • MT_Objects表:用于存储对象的定义,包括了其唯一的ID、从属的组织的ID、名字等。在Salesforce系统中的所有“租户”组织的对象定义同时保存在这一个表中

  • MT_Fields表:用于存储对象字段的信息,包括了其唯一的ID、从属的组织的ID、从属的对象的ID、名字、字段类型等。在Salesforce系统中的所有“租户”组织包含的字段同时保存在这一个表中

  • MT_Data表:用于存储各个对象的实际数据,相当于传统关系数据库中的一行记录。在Salesforce系统中所有“租户”组织中的数据同时保存在这一个表中

  • MT_Clobs表:CLOB是“character large objects”的简称。这些对象可以存储长达32000字符的数据。当MT_Data表中存在的数据包含过多的字符时,系统会将这些长字符数据存储在MT_Clobs表中,而在MT_Data表中存储一个MT_Clobs表某一行的ID值,从而精简MT_Data表

  • MT_Indexes表:这是一个数据透视表(Pivot table),用于存储MT_Data表中数据的索引。该表主要用于提高数据的搜索效率

  • MT_Unique_Indexes表:该表和MT_Indexes表类似,也是一个数据透视表,也存储了数据的索引。不同之处在于该表中的数据索引保持着唯一性。在用户给某字段增加唯一约束时,系统会将该字段的内容记录在此表中。当用户插入重复的值的时候,系统会根据该表的内容给出警告信息

  • MT_Fallback_Indexes表:MT_Fallback_Indexes表中保存了所有数据的名字(Name)。在特殊情况下,Salesforce有可能无法完成用户需要的搜索。在这种情况下,Salesforce会启用备用搜索机制,直接查询MT_Fallback_Indexes表中的数据,从而给出名字符合搜索条件的数据

Force.com 多租户架构的更多相关文章

  1. Oracle 12c多租户架构浅析

    Oracle数据库12c的一大创新即是其采用的多租户架构.对于多租户这项新功能,业内的评价褒贬不一.有的声音认为,这项功能的用处不是特别大,但在某些场景或特定的环境下,多租户依然有它的用处.其最大的用 ...

  2. ABP Zero 单部署,单数据库,多租户架构

    首先,我们应该定义多租户系统中的两个条目: 租主(Host):租主是单例的(只有一个租主).租主会对创建和管理租户负责.因此,一个“租主用户”比所有的租户等级更高,并独立于所有租户,同时还能控制他们. ...

  3. SaaS “可配置”和“多租户”架构的几种技术实现方式

    1.数据存储方式的选择 多租户(Multi-Tenant ),即多个租户共用一个实例,租户的数据既有隔离又有共享,说到底是要解决数据存储的问题. 常用的数据存储方式有三种. 方案一:独立数据库   一 ...

  4. Mybatis Plus 多租户架构实现(完美教程)

    一.背景介绍 多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用户间数据的隔离性. 简单讲 ...

  5. Hadoop多租户架构配置

    cloudera manager 进到cluster里面,点击Dynamic Resource Pools,没做任何配置默认情况下,资源池里有个default资源组 hadoop jar /usr/l ...

  6. ORACLE--12C--多租户体系架构概念

    一,概念 1,何为多租户? 官网链接: 飞机直达>> 多租户这个概念并不是12C的新特性,而是体系架构,多租户架构使得oracle 数据库成为了一个多租户的容器数据库,也就是contain ...

  7. 在 Windows Azure 上设计多租户应用程序

    作者:Suren Machiraju 和 Ralph Squillace 审校:Christian Martinez.James Podgorski.Valery Mizonov 和 Michael ...

  8. 一种Django多租户解决方案

    什么是多租户? 多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用户间数据的隔离性. 多租 ...

  9. ABP框架 - 多租户

    文档目录 本节内容: 什么是多租户 多部署 - 多数据库 单部署 - 多数据库 单部署 - 单数据库 单部署 - 混数据库 多部署 - 单/多/混 数据库 ABP中的多租户 启用多租户 宿主与租户 会 ...

随机推荐

  1. httpd: apr_sockaddr_info_get() failed for bogon

    AH00557: httpd: apr_sockaddr_info_get() failed for bogon AH00558: httpd: Could not reliably determin ...

  2. Servlet案例7:jsp技术及案例

    jsp运行原理: 根据jsp文件创建java文件(servlet),并编译运行 第一次访问时会被翻译成servlet后执行 jsp三个指令: 1.page指令:页面翻译运行的属性的配置(通常使用默认) ...

  3. Redis简明教程

    redis是什么: Redis is an open source, BSD licensed, advanced key-value store. It is often referred to a ...

  4. python之使用PIL模块制作随机验证码

    制作随机验证码,需要如下知识点: 1.随机验证码的制作(这里用的是random模块随机产生字符) 2.图片的制作 3.随机直线干扰项 4.其他随机干扰项 代码如下: from PIL import I ...

  5. android_安装包_NoClassDefFoundError

    说说这个问题出现的地方吧: 能够成功的打包安装包,但是在安装包安装后,准备运行时出现了这个问题. 查看了这篇文章,讲得有理有据,并没有解决我的问题. 通过谷歌查找到这个stackoverflow,解决 ...

  6. SpringBoot---静态页面加载

    Thymeleaf模板配置: maven添加支持如下: <dependency> <groupId>org.springframework.boot</groupId&g ...

  7. HTML XML 介绍

    一. HTML(HyperTextMark-upLanguage)即超文本标记语言,是WWW的描述语言. 二. XML即ExtentsibleMarkup Language(可扩展标记语言), XML ...

  8. Docker入门之一Docker在Window下安装

    最近这几年,各个大公司都在打造自己的云平台,什么阿里云,华为云,腾讯云等等云,以及各种的微服务架构,其实在这当中Docker容器技术算是一个很重要的角色. 一.下载 在下载之前首先检查一下自己的电脑是 ...

  9. kubernetes系列(一)安装和配置

    谈到kubernetes(或者说k8s)不得不提到云计算.虚拟化以及容器技术,相关介绍网上一大堆,不再赘述.而kubernetes的出现就是为了高效的管理云端运行的docker容器. 环境 docke ...

  10. c# 获取当前绝对路径

    /// <summary> /// 获得当前绝对路径 /// </summary> /// <param name="strPath">指定的路 ...