设为首页 收藏本站
查看: 721|回复: 0

[经验分享] oracle实例、schema,以及多租户方案

[复制链接]

尚未签到

发表于 2016-7-24 12:45:39 | 显示全部楼层 |阅读模式
写这篇博客的起源,是前几天讨论我们的一个应用如何实现多租户,引发一些思考,在此记录一下

场景是这样的,我们的应用是企业应用,所以与互联网应用有先天的区别。互联网应用,比如淘宝、新浪微博等,面向的是终端用户,天然必须是多用户共享一个系统

而我们的应用面向的是项目,目前是单个应用支撑单个项目。如果需要支撑多个项目,会用部署多个应用的方式来解决

但是随着接入项目数量增多,一个项目必须部署一套应用,硬件成本也随之上升,最终就给一线成本带来压力。为了降低项目成本,产品规划开始往多租户发展,即单个应用服务多个项目

DSC0000.png

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下,而业务表则是一样的复制多份

DSC0001.png

第二种方案,是所有项目的数据,放到同一个表里,通过project_id字段进行区分

DSC0002.png

这2种方案各有利弊:

第一种方案,相当于从一开始就进行了表拆分,不同项目的数据放在不同的表里,数据库的压力比较小。但是这要求应用解决数据库路由的问题,针对不同项目的查询请求,能够自动路由到不同的表中操作。传统的ORM方案,基本上很难奏效。因为ORM中的实体类,与数据库表是一一对应的(静态配置了schema和table),无法适应这种场景。或者说hibernate等ORM框架,针对这类场景,存在先天不足

第二种方案,表相对固定,在DAL层不需要做特别的处理,传统的ORM方案即可满足。但是相对的,随着接入项目数增加,数据库的压力会很大,因为所有项目的数据都在一张表里,数据库IO会成为应用的瓶颈。最终还是会走到表拆分的这一步,照样会面临第一种方案的问题,即如何实现数据库访问的路由

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-248654-1-1.html 上篇帖子: 一个菜鸟的oracle之路-----二 下篇帖子: Oracle创建用户、赋予权限的过程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表