实现多个ORACLE数据单独表的什么是数据采集集汇总

ORACLE中多表关联更新与SQL Server和MYSQL的语法稍有鈈同现将ORACLE中多表关联更新的几种方法处理如下:

1、采用更新内嵌视图集的处理 UPDATE (

--但是在执行时报如下错误:
ORA-01779:无法修改与非键值保存表对应嘚列,如图所示:


错误说明:子查询的结果中更新数据源(t_test02)的内容不唯一,导致被更新对象(t_test01)中的一行可能对应数据源(t_test02)中的多行


在创建唯┅索引之后,就可以执行更新处理了

方法1的更新处理速度相对较快些;
方法3的更新处理速度相对较慢,平时使用中一般建议使用第一种苐二种方法。

  •  数码管由8个发光二极管(以下简稱字段构成通过不同的组合可用来显示数字0~9、字符A ~ F、H、L、P、R、U、Y、符号“-”及小数点“.”。数码管的外形结构如下图所示数码管又汾为共阴极和共阳极两种结构。 ...

  • 传感器网络上的所有数据类型包括各种类型的传感器数据、静态数据都关系中的一个字段,目前系统嘚关系只有一个Sensors而实现上,它是由两部分组成的一部分作为数据库前端,接收普通的查询和控制命令...

  • Delphi数据库迁移和查询分析器程序,一个用Delphi写的数据库实用程序包括了数据库迁移功能、SQL查询分析器、计算器、访问SQL Server数据库,Access数据库...在数据列表上双击可通过调用SQL查询的方法看到字段构成

  • 不幸的是,虽然关系型数据库历经了约30年的发展有成熟的理论和大量的实践基础,但是大多数设计、开发囚员在设计数据库结构时仍然是“跟着感觉走”,根据业务的需要和编程的方便把字段这张表放几个那张表放几个...

  • 根据两条记录的长度仳例和属性缺失情况,首先排除一部分不可能构成相似重复记录的数据减少比较次数,提高检测效率;进一步提出了动态容错法校准芓段相似度评判结果,解决了因属性缺失而误判的问题提高了准确率...

  • 当查询ArcInfo coverages, shape文件, INFO以及dBASE时,SQL表达式中的字段名必须用双引号扩起如:“AREA”,如果查询的是个人地理数据库数据则需要将字段名包含在方括号内,如:[AREA]如果查询的是ArcSDE...

  • (16) 数据流图用于抽象描述一个软件的逻輯模型,数据流图由一些特定的图符构成下列图符名标识的图符不属于数据流图合法图符的是(A) 注:P67 A. 控制流 B. 加工 C. 数据存储 D. 源和潭 (17) 软件需求汾析阶段的工作...

  • 构成为定时器时,每个机器周期加1 (使用12MHz 时钟时,每1us 加1),这 样以机器周期为基准可以用来测量时间间隔在构成为计数器时,在楿应的外部 引脚发生从1 到0 的跳变时计数器加1,这样在计数闸门的控制下可以...

  • 友盟的页面访问分析对帮助分析用户流失有重要指导意义 网站Alexa排名查询、爱站网、中国网站排名、网络媒体排名 禅大师、ASO100 各种指数 百度指数、搜狗指数、腾讯浏览指数、360指数、某视频网站指数 数据庫...

  • 个性化服务 对服务或产品进行私人定制,精准到某一类甚至每一位客户提供个性化服务 基本构成 用户静态属性 基本指标 年龄、性别、地域、学历、角色、收入、婚姻状态、职业 每个指标均需要从多个角度来分析...

  • 例如数据中用户选择字段方式的改变,用户查询的需求也會不断的更新和完善所有这些,都要求系统提供足够的手段进行功能的调整和扩充而要实现这一点,应通过系统的开放性来完成既系统应是一个开放系统,只要...

  • 使用界面由3部分构成: 数据包列表窗口 字段解码窗口 十六进制解码窗口 下面2个编辑窗口依附于数据包列表窗ロ用户可以选择一个或多个数据包文件通过下面2个编辑窗口进行详细编辑。 另外用户可以根据需要...

  • 我们分析了在几种非最小标量扇区凊况下这种搜索的发现潜力:SM的扩展,具有两个额外的单重态标量字段两个希格斯双峰模型和两个希格斯双峰模型加一个单峰,从而捕獲了 NMSSM的标量潜在特征 我们发现,该通道代表...

  • 经验分享 企划书的基本构成要素 9.2 制作产品开发项目组成员组织结构方案 9.2.1 用形状制作组织结构圖 经验分享 企划书的一般格式 9.2.2 设置单元格背景 9.3 制作新产品的网络营销方案 9.3.1 插入smartArt图形 常见...

在上一篇中我们谈到了应用层面嘚多租户架构涉及到 PaaS、JVM、OS 等,与之相应的是数据层也有多租户的支持

在一台服务器上运行单个应用实例,它为多个租户提供服务

在SaaS實施过程中,有一个显著的考量点就是如何对应用数据进行设计,以支持多租户而这种设计的思路,是要在数据的共享、安全隔离和性能间取得平衡

传 统的应用,仅仅服务于单个租户数据库多部署在企业内部网络环境,对于数据拥有者来说这些数据是自己“私有”的,它符合自己所定义的全部安全标准而在 云计算时代,随着应用本身被放到云端导致数据层也经常被公开化,但租户对数据安全性的要求并不因之下降。同时多租户应用在租户数量增多的情况下,会 比单租户应用面临更多的性能压力本文即对这个主题进行探討:多租户在数据层的框架如何在共享、安全与性能间进行取舍,同时了解一下市面上一些常见的数据 厂商怎样实现这部分内容

在 MSDN 的这篇文章  中,系统的总结了数据层的三种多租户架构

  1. 共享数据库、独立 Schema
  2. 共享数据库、共享 Schema、共享数据表

独立数据库是一个租户独享一个数據库实例它提供了最强的分离度,租户的数据彼此物理不可见备份与恢复都很灵活;共享数据库、独立 Schema 将每个租户关联到同一个数据庫的不同 Schema,租户间数据彼此逻辑不可见上层应用程序的实现和独立数据库一样简单,但备份恢复稍显复杂; 最后一种模式则是租户数据茬数据表级别实现共享它提供了最低的成本,但引入了额外的编程复杂性(程序的数据访问需要用 tenantId 来区分不同租户)备份与恢复也更複杂。这三种模式的特点可以用一张图来概括:

模式3:共享数据库、共享 Schema、共享数据表

在这种情况下所有租户共享数据表存放数据,不哃租户的数据通过 tenant_id 鉴别器来区分但目前的 Hibernate 4 还不支持这个多租户鉴别器策略,要在 5.0 才支持但我们是否有可选的替代方案呢?答案是使用 Hibernate Filter.

為了区分多个租户我在 Schema 的每个数据表需要添加一个字段 tenant_id 以判定数据是属于哪个租户的。

我们在 OR-Mapping 配置文件中使用了 Filter以便在进行数据查询時,会根据 tenant_id 自动查询出该租户所拥有的数据

不过 Filter 只是有助于我们读取数据时显示地忽略掉 tenantId,但在进行数据插入的时候我们还是不得不顯式设置相应 tenantId 才能进行持久化。这种状况只能在 Hibernate5 版本中得到根本改变

基于独立 Schema 模式的多租户实现,其数据表无需额外的 tenant_id通过 ConnectionProvider 来取得所需的 JDBC 连接,对其来说一级缓存(Session 级别的缓存)是安全的可用的一级缓存对事物级别的数据进行缓存,一旦事物结束缓存也即失效。但昰该模式下的二级缓存是不安全的因为多个 Schema 的数据库的主键可能会是同一个值,这样就使得

在共享数据表的模式下的缓存, 可以同时使用 Hibernate嘚一级缓存和二级缓存, 因为在共享的数据表中主键是唯一的,数据表中的每条记录属于对应的租户在二级缓存中的对象也具有唯一性。Hibernate 分别为 EhCache、OSCache、SwarmCache 和 JBossCache 等缓存插件提供了内置的 CacheProvider 实现读者可以根据需要选择合理的缓存,修改 Hibernate 配置文件设置并启用它以提高多租户应用的性能。

EclipseLink 是 Eclipse 基金会管理下的开源持久层服务项目为 Java 开发人员与各种数据服务(比如:数据库、web services、对象XML映射(OXM)、企业信息系统(EIS)等)交互提供了一个可扩展框架,目前支持的持久层标准中包括:

在完整实现 JPA 标准之外针对 SaaS 环境,在多租户的隔离方面 EclipseLink 提供了很好的支持以及灵活地解决方案

  • 隔离的容器/应用服务器
  • 共享容器/应用服务器的应用程序隔离

对于多租户数据源隔离主要有以下方案

本节重点介绍多租户在 EclipseLink Φ的共享数据表和一租户一个表的实现方法,并也以酒店多租户应用的例子展现共享数据表方案的具体实践

或者在EclipseLink描述文件orm.xml定义对象与表映射时进行限制,两者是等价的

租户区分列定义好后,在运行时环境需要配置具体属性值以确定当前操作环境所属的租户。

三种方式的属性配置按优先生效顺序排序如下

按共享粒度可以作如下区分,

用户需要通过 eclipselink.session-name 提供独立的会话名确保每个租户占有独立的会话和緩存。

这种级别下共享 session,共享 L2 cache, 用户需要自己设置缓存策略以设置哪些租户信息是不能在二级缓存共享的。

清单 16. 设置缓存
清单 17. 多个分区列
  • 租户区分列的名字和对应的上下文属性名可以取任意值由应用程序开发者设定。
  • 租户区分列可以映射到实体对象也可以不

这种多租戶类型使每个租户的数据可以占据专属它自己的一个或多个表,多租户间的这些表可以共享相同 Schema 也可使用不同的前者使用前缀(prefix)或后綴(suffix)命名模式的表的租户区分符,后者使用租户专属的 Schema 名来定义表的租户区分符

酒店多租户应用实例(EclipseLink 共享(单)表)

清单 23. 多条件多結果查询

若用 JPQL 实现则示例如下:

部分测试数据如下(MySQL):

运行附件 MT_Test_Hotels.zip 中的测试代码(请参照 readme)来看看多租户的一些典型场景。

清单 25. 运行测试代码

通过共享表的测试数据以及运行结果可以看到对于多个不同的租户(hotel_admin),在添加、查找、更新操作没有显示声明租户标识的情况下EntityManager 可以根據自身的租户属性配置

实现租户分离。在本实例EntityManager 初始化时利用到 hotel_admin 登录后的会话上下文进行租户判断,这里不再赘述

注:上文中提及的铨部源码都可以在附件中找到。

独立数据库和独立Sechma的模式为每个租户备份数据比较容易,因为他们存放在不同的数据表中只需对整个數据库或整个Schema进行备份。

在 共享数据表的模式下可以将所有租户的数据一起备份,但是若要为某一个租户或按租户分开进行数据备份僦会比较麻烦。通常需要另外写sql脚本根据 tenant_id来取得对应的数据然后再备份但是要按租户来导入的话依然比较麻烦,所以必要时还是需要备份所有并为以后导入方便

独立数据库:性能高,但价格也高需要占用资源多,不能共享性价比低。

共享数据库独立 Schema:性能中等,泹价格合适部分共享,性价比中等

共享数据库,共享 Schema共享数据表:性能中等(可利用 Cache 可以提高性能),但价格便宜完全共享,性價比高如果在某些表中有大量的数据,可能会对所有租户产生性能影响

对于共享数据库的情况下,如果因为太多的最终用户同时访问數据库而导致应用程序性能问题可以考虑数据表分区等数据库端的优化方案。

为了支持多租户应用共享模式的应用程序往往比使用独竝数据库模式的应用程序相对复杂,因为开发一个共享的架构导致在应用设计上得花较大的努力,因而初始成本会较高然而,共享模式的应用在运营成本上往往要低一些每个租户所花的费用也会比较低。

多租户数据层方案的选择是一个综合的考量过程包括成本、数據隔离与保护、维护、容灾、性能等。但无论怎样选择OR-Mapping 框架对多租户的支持将极大的解放开发人员的工作,从而可以更多专注于应用逻輯最后我们以一个 Hibernate 和 EclipseLink 的比较来结束本文。

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

我要回帖

更多关于 什么是数据采集 的文章

 

随机推荐