写这篇博客的起源,是前几天讨论我们的一个应用如何实现多租户,引发一些思考,在此记录一下
场景是这样的,我们的应用是企业应用,所以与互联网应用有先天的区别。互联网应用,比如淘宝、新浪微博等,面向的是终端用户,天然必须是多用户共享一个系统
而我们的应用面向的是项目,目前是单个应用支撑单个项目。如果需要支撑多个项目,会用部署多个应用的方式来解决
但是随着接入项目数量增多,一个项目必须部署一套应用,硬件成本也随之上升,最终就给一线成本带来压力。为了降低项目成本,产品规划开始往多租户发展,即单个应用服务多个项目
ORACLE的基本结构如上图:
数据库:本质上就是文件的集合,RDBMS的各种表,最终是以数据文件(.ora等)的方式保存的
实例:进程和内存的集合。oracle客户端不能直接操作数据库的数据文件,而是通过实例来操作。实际上oracle client和实例,构成了C/S的关系
schema:schema是oracle特有的概念,和user是一一对应的。表和索引等,不会直接挂载在数据库下,而是挂载在不同的schema下
表:就是应用程序最经常打交道的数据库表
打一个比方来说明:
数据库就是一座公寓,所有的东西都在公寓里面。然后实例就是这座公寓的管理处,外面的人不能直接跟公寓打交道,需要通过管理处来打交道。一个实例只能加载一个数据库,但是在RAC环境下,一个数据库可以被多个实例同时加载
公寓里有很多房间,这些房间就是schema。每个房间都有一个主人,这个主人就是user。主人和房间是一一对应的。所有的表、索引等,都是房间里的家具,不属于公寓,而是属于具体的房间
schema.table,才是一张表的唯一标识。有点像JAVA里的类标识,一个类名并不能唯一标识一个class,而是跟ClassLoader组合在一起,ClassLoader.Class才能唯一标识一个类。这里ClassLoader就相当于schema,Class就相当于table
接下来,我们的产品要实现多租户,就一定涉及到数据隔离的问题,也就不能脱离上面的oracle模型(假定不更换数据库)
现在就有2种方案
第一种方案,是将不同的项目数据,放到不同的schema下,而业务表则是一样的复制多份
第二种方案,是所有项目的数据,放到同一个表里,通过project_id字段进行区分
这2种方案各有利弊:
第一种方案,相当于从一开始就进行了表拆分,不同项目的数据放在不同的表里,数据库的压力比较小。但是这要求应用解决数据库路由的问题,针对不同项目的查询请求,能够自动路由到不同的表中操作。传统的ORM方案,基本上很难奏效。因为ORM中的实体类,与数据库表是一一对应的(静态配置了schema和table),无法适应这种场景。或者说hibernate等ORM框架,针对这类场景,存在先天不足
第二种方案,表相对固定,在DAL层不需要做特别的处理,传统的ORM方案即可满足。但是相对的,随着接入项目数增加,数据库的压力会很大,因为所有项目的数据都在一张表里,数据库IO会成为应用的瓶颈。最终还是会走到表拆分的这一步,照样会面临第一种方案的问题,即如何实现数据库访问的路由
- 大小: 4.4 KB
- 大小: 5.7 KB
- 大小: 4.2 KB
分享到:
相关推荐
- **Carfax**:“Oracle多租户数据库在控制schema和应用程序方面取得了重大进展。我们可以隔离它们,并根据需要调整性能优先级,这让我们能够更有效地管理更多数据库。” #### 结论 Oracle 12c的多租户架构为企业...
除此之外,文档可能还包括Oracle的最新特性和技术,如Oracle 12c的多租户架构、In-Memory选项、SQL In-Memory等,这些都是Oracle近年来的重要发展。 总之,这份由Oracle技术专家TianleSoftware编写的1400多页的学习...
本示例将探讨如何使用EclipseLink实现SaaS的多租户解决方案。 EclipseLink是Oracle公司开发的一款开源JPA(Java Persistence API)提供商,它支持ORM(对象关系映射)和数据访问技术,使得Java开发者可以方便地处理...
多租户架构中,不同租户的数据需要在同一个数据库实例中被有效隔离,以保证数据安全性和隐私性。在文档中提出了三种SaaS数据库方案:独立数据库、独立Schema和共享数据库,每种方案具有不同的资源共享度、复杂度、...
ASM现在支持多租户环境,允许在一个实例中管理多个数据库,提高了资源利用率。 四、SQL性能分析 SQL Performance Analyzer工具能够分析SQL语句执行计划,预测升级到新版本可能带来的性能变化。这对于.NET、C#等应用...
多租户支持是Mycat的重要功能之一,它允许在同一个Mycat实例中管理多个客户的数据,同时保证数据的隔离。这对于SaaS(软件即服务)提供商来说非常重要,能够在同一个数据库系统上提供多租户服务,而不需要为每个租户...
常见的应用场景包括简单的读写分离、大数据分库分表、多租户应用以及替代 HBase 进行大数据分析。 MyCat 中的一些核心概念包括: 1. 逻辑库(Schema):对应用开发者来说,MyCat 可以被视为一个或多个数据库集群...
5. **租户管理**:`tenant_info`表用于管理租户,每个租户对应一个独立的命名空间,可以看作是多租户环境中的组织单元。 6. **服务健康检查**:Nacos通过`instance`表中的健康检查相关字段,定期对服务实例进行健康...
DBaaS的核心在于提供一种集中的、资源共享的平台,能够支持多个应用租户同时使用,并确保资源的隔离、灵活调配以及服务等级的差异化。 在Oracle DBaaS的部署模式中,主要有以下四种: 1. **基于虚拟机部署数据库...
- 支持多租户解决方案。 - 支持分布式事务(弱XA),并且在1.6.5版本中引入了对XA分布式事务的支持。 - 支持全局序列号,解决了分布式环境下的主键生成问题。 - 分片规则丰富且易于扩展,支持插件化开发。 - 强大的...
其中,逻辑库(schema)、逻辑表(table)、分片节点(dataNode)、节点主机(dataHost)、分片规则(rule)、全局序列号(sequence)和多租户技术(multi-tenancy)是理解Mycat运作的关键概念。 逻辑库是数据库...