本文参考自官方文档

多租户架构

作为云计算平台的先驱,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. Java学习笔记46(多线程三:线程之间的通信)

    多个线程在处理同一个资源,但是线程的任务却不相同,通过一定的手段使各个线程能有效地利用资源, 这种手段即:等待唤醒机制,又称作线程之间的通信 涉及到的方法:wait(),notify() 示例: 两个 ...

  2. 初涉Java方法

    初涉Java方法 方法就是一段可重复调用的代码段,方法命名规范,第一个单词小写,从第二个单词开始首字母均大写.         格式:              public static 返回值类型 ...

  3. debian安装tftp服务

    步骤1:安装 apt-get install tftp-hpa tftpd-hpa tftp-hpa是client,tftpd-hpaserver 步骤2:建立tftp目录 mkdir /tftpbo ...

  4. docker的安装与启动

    安装docker Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的.在很多版本的CentOS中是不支 ...

  5. 开源API测试工具 Hitchhiker v0.10 - 中文版

    Hitchhiker 是一款开源的支持多人协作的 Restful Api 测试工具,支持自动化测试, 数据对比,压力测试,支持脚本定制请求,可以轻松部署到本地,和你的team成员一起协作测试Api. ...

  6. cmd窗口使用sftp命令非密钥和密钥登录SFTP服务器的两种方式

    cmd窗口使用sftp命令非密钥和密钥登录SFTP服务器的两种方式 一.在Windows环境下搭建SFTP服务器可参见http://www.cnblogs.com/Kevin00/p/6341295. ...

  7. Tomcat8源码笔记(一)Lifecycle接口

    第一次阅读Tomcat8源码,就以Lifecycle作为笔记阅读的开篇吧,一千个读者就有一千个哈姆雷特,每个人都Tomcat的理解都不同,如果不记录一次Tomcat源码可能忘了就忘了. 断断DEBUG ...

  8. this引用逃逸

    1.什么是This逃逸? 在构造器构造还未彻底完成前(即实例初始化阶段还未完成),将自身this引用向外抛出并被其他线程复制(访问)了该引用,可能会问到该还未被初始化的变量,甚至可能会造成更大严重的问 ...

  9. 深入浅出 JVM GC(1)

    # 前言 初级 Java 程序员步入中级程序员的有一个无法绕过的阶段------GC(Garbage Collection).作为 Java 程序员,说实话,很幸福,不用像 C 程序员那样,时刻关心着 ...

  10. OOP 面向对象的理解

    概念 面向对象编程(OOP)是一种编程语言模型,围绕对象是行为.数据.逻辑. 从历史上看,程序被视为一种逻辑程序,它接收输入数据,处理数据并生成输出数据. 基础 面向对象的3大核心思想:封装.继承.多 ...