云计算设计模式(十四)——实体化视图模式

云计算设计模式(十四)——实体化视图模式

产生过在一个或多个数据存储中的数据预填充的观点时,数据被格式化以不利于所需的查询操作的一种方式。这种模式可以帮助支持高效的查询和提取数据,并提高应用程序的性能。

背景和问题

何时存储数据时,优先级为开发者和数据管理员经常集中在如何将数据存储,而不是它是如何读出。所选择的存储格式通常是密切相关的数据,用于管理数据的大小和数据的完整性,并且在使用的那种存储的要求的格式。例如,使用的NoSQL文献商店时,该数据通常被表示为一系列的聚集体,其每一个包含了所有的信息,该实体。

然而,这可能对查询产生负面影响。当查询需要从一些实体,如订单的几个客户没有所有的顺序的信息的汇总的数据的一个子集,它必须提取所有的相关实体的数据,以获得所需的信息。

解决方案

以支持高效的查询,一个常见的解决方案是生成,预先,即物化数据中最适合于所要求的结果集的格式的图。其中源数据不是一个格式适合于查询,在那里产生一个合适的查询中的实体化视图模式描述产生数据的预先填充的观点在环境中是困难的,或者其中的查询性能差,由于该数据或该性质数据存储区。

这些实例化视图,其中只包含一个查询所需的数据,以便应用程序能够快速获得他们需要的信息。除了连接表或组合的数据实体,物化视图可以包括计算列或数据项的指定作为查询的一部分的当前值,组合值或对数据项执行的转换的结果,和值。物化视图甚至可以就某一个单一的查询优化。

关键的一点是,一个实体化视图,它包含的数据完全是一次性的,因为它可以完全从源数据存储重建。实例化视图是不能直接更新的应用程序,因此它实际上是一个专门的缓存。

何时该视图更改源数据,视图必须被更新以包括新的信息。这可以在适当的日程自动发生,或在系统检测到变化到原始数据的时候。在其他情况下,可能需要手动重新生成视图。

图1示出如何实体化视图图案可能被使用的例子。

图1  - 实体化视图模式

问题和注意事项

在决定如何实现这个模式时,请考虑以下几点:
•考虑如何以及何时该视图将被更新。理想的情况下,将被再生响应于一个事件,指示改变到所述源数据,尽管在某些情况下,这可能导致过度的开销,如果源数据发生急剧的变化。或者,考虑使用计划任务,外部触发或手动操作来启动该视图的再生。
•在某些系统中,使用事件采购图案保持仅修改的数据的事件存储区时,例如,实体化视图可能是必要的。通过检查所有事件,以确定当前状态预先填充的观点可以得到从事件存储信息的唯一方式。在使用事件采购时比其它情况下,有必要测量的优点是物化视图可以提供。物化视图往往是专门针对一个或少数的查询。如果许多查询必须被使用,维护实例化视图可能会导致不可接受的存储容量的要求和存储成本。
•生成的视图时,和更新视图时,如果这发生在一个日程表考虑数据一致性的影响。如果源数据发生了变化时,生成的视图时的点,在该视图中的数据的复制可能会与原来的数据完全一致。
•考虑在那里你将存储的视图。认为不必位于同一商店或分区的原始数据。它可能是从几个不同的分区合并的一个子集。
•如果视图是短暂的,仅仅是用来通过反映该数据的当前状态来提高查询性能,或提高扩展性,它可被存储在高速缓存中或者在一个较不可靠的位置。它可以的,如果失去了重建。
•当定义一个实体化视图中,在数据项或列的基础上计算的或现有的数据项的转换的视图,在查询传递的值,或者对这些值,其中,这是适当的组合发挥其最大价值。
•凡存储机制支持它,考虑索引实体化视图,以进一步提高性能。大多数关系型数据库支持索引的意见,因为这样做是基于Apache Hadoop的大数据解决方案。

何时使用这个模式

这种模式非常适合于:
•创建实例化视图以上数据是难以直接查询,或者查询必须以提取存储在归一化,半结构化或非结构化的方式数据非常复杂。
•创建临时视图,可以显着提高查询性能,或可直接充当UI源视图或数据传输对象(DTO的),进行报告,或进行显示。
•支持偶尔连接或断开连接的情况,其中连接到数据存储并不总是可用的。该视图可能在这种情况下被本地缓存。
•简化查询和在不需要源数据格式的知识的方式曝光数据用于实验。例如,通过在一个或多个数据库,或在NoSQL的存储的一个或多个结构域结合不同的表,然后格式化的数据,以满足它的最终用途。
•提供访问源数据的特定子集,出于安全或隐私原因,不应该是一般访问,公开进行修改,或者完全暴露给用户。
•使用基于他们的个人能力不同的数据存储在弥合脱节。例如,通过使用云存储中是有效率的用于写入作为基准数据存储,并能提供良好的查询和读取性能保持实例化视图的关系数据库。

这种模式可能不适合于下列情况:
•源数据简单,便于查询。
•源数据非常迅速的变化,或者可以在不使用视图来访问。中创建视图处理开销可能会避免在这些情况下。
•一致性是一个高优先级。的意见可能并不总是与原始数据完全一致。

例子

图2示出了使用实体化视图模式的一个例子。在订单,订单项数据,并在微软的Azure存储帐户单独的分区表的客户相结合,生成包含在电子类别中的每个产品销售总额的视图,客户是谁的采购数量的计数在一起每个项目。

图2 - 使用实体化视图模式产生销售的总结

创建这个实例化视图需要复杂的查询。然而,通过将查询结果作为实体化视图,用户可以轻松获得的结果和直接使用它们,或将其纳入另一个查询。观点很可能在一个报告系统或仪表板中使用,所以可以更新计划的基础上,如每周一次。

注意:

虽然这个例子使用的Azure表存储,许多关系数据库管理系统还提供了实例化视图的原生支持。

本文翻译自MSDN:http://msdn.microsoft.com/en-us/library/dn589782.aspx

时间: 2024-10-10 09:56:09

云计算设计模式(十四)——实体化视图模式的相关文章

云计算设计模式(二十四)——仆人键模式

云计算设计模式(二十四)——仆人键模式 使用一个令牌或密钥,向客户提供受限制的直接访问特定的资源或服务,以便由应用程序代码卸载数据传输操作.这个模式是在使用云托管的存储系统或队列的应用中特别有用,并且可以最大限度地降低成本,最大限度地提高可扩展性和性能. 背景和问题 客户端程序和网络浏览器经常需要读取和写入文件或数据流,并从一个应用程序的存储空间.通常,应用程序将处理的运动数据,或者通过从存储读取它,并将其传输到客户端,或通过从客户机读取该载流并将其存储在数据存储中.然而,这种方法吸收了宝贵的资

云计算设计模式(四)——消费者的竞争模式

云计算设计模式(四)--消费者的竞争模式 允许多个并发用户处理在同一个通讯通道接收的消息.这种模式使系统能够同时处理多个邮件,以优化吞吐量,提高可扩展性和可用性,以及平衡工作负载. 背景和问题 在云中运行的应用程序,可以预计,以处理大量的请求.而不是过程的每个请求同步地,一个常用的方法是通过一个消息传送系统到该异步地处理它们的另一服务(消费者服务),以通过他们的应用程序.这种策略有助于确保在应用程序的业务逻辑没有被阻塞,而正在处理的请求. 请求的数量可以随着时间的原因有很多显著变化.突然一阵在用

云计算设计模式(七)——事件获取模式

云计算设计模式(七)--事件获取模式 使用仅追加存储到记录完整一系列描述在一个域上取数据,而不是存储仅仅是当前的状态,从而使存储区可以被用来实现该域对象的动作事件.该图案可以通过避免需要同步的数据模型和商业领域中简化复杂的结构域的任务;提高性能,可扩展性和响应能力;提供交易数据的一致性;并保持完整的审计跟踪和记录,可能使补偿措施. 背景和问题 大多数应用程序使用数据,并在典型的方法是应用到通过更新它作为用户使用的数据保持数据的当前状态.例如,在传统的创建,读取,更新和删除(CRUD)模型的典型数

设计模式 ( 十八 ):State状态模式 -- 行为型

1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ellse语句来做状态判断来进行不同情况的处理.但是对复杂状态的判断就显得“力不从心了”.随着增加新的状态或者修改一个状体(if else(或switch case)语句的增多或者修改)可能会引起很大的修改,而程序的可读性,扩展性也会变得很弱.维护也会很麻烦.那么我就考虑只修改自身状态的模式. 例子1:按钮来控制一个电梯的状态,一个电梯开们,关门,停,

Oracle案例02——ORA-12034: "SCOTT"."USER_TABLE" 上的实体化视图日志比上次刷新后的内容新

最近同事在交接工作时,发现有几个schedule job没有执行成功,我这边给看了下,其中一个是由于数据库迁移,调用dblink的host主机IP在tnsnames中没有变更导致,还有一个是无法视图的报错,即报错信息如下: 一.错误日志 通过查看schedual job报错日志,具体报错信息如下 ORA-12034:"SCOTT"."USER_TABLE" 上的实体化视图日志比上次刷新后的内容新ORA-06512: 在 "SYS.DBMS_SNAPSHOT

Oracle实体化视图

1.减轻网络负担:通过MV将数据从一个数据库分发到多个不同的数据库上,通过对多个数据库访问来减轻对单个数据库的网络负担. 2.搭建分发环境:通过从一个中央数据库将数据分发到多个节点数据库,达到分发数据的目的. 3.复制数据子集:MV可以进行行级/列级的筛选,这样可以复制需要的那一部分数据. create materialized view [view_name] {TABLESPACE (表空间名)}              --保存表空间 {BUILD [DEFERRED|IMMEDIATE

云计算设计模式(九)——联合身份模式

云计算设计模式(九)——联合身份模式 验证委托给外部身份提供者.这种模式可以简化开发,最大限度地减少对用户管理的要求,并提高了应用程序的用户体验. 背景和问题 用户通常需要使用由提供,并通过与它们有商业关系的不同组织主持的多个应用程序一起工作.但是,这些用户可能被迫使用特定的(和不同的)的凭证,每一个.这可以: •原因脱节的用户体验.用户经常忘记登录凭据时,他们有很多不同的的. •暴露安全漏洞.当用户离开公司的帐户,必须立即取消设置.这是很容易忽略这在大型组织中. •复杂的用户管理.管理员必须管

设计模式 ( 十九 ):Strategy策略模式 -- 行为型

设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查找.排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法:当然也可以将这些查找算法封装在一个统一的方法中,通过if…else…或者case等条件判断语句来进行选择.这

云计算设计模式(十三)——领导人选举模式

云计算设计模式(十三)——领导人选举模式 通过协调合作,在分布式应用程序的任务实例集合执行的操作,选举一个实例作为承担管理的其他实例责任的领导者.这个模式可以有助于确保任务实例不互相冲突,导致争用共享资源,或与其他的任务实例正在执行的工作无意中干扰. 背景和问题 一个典型的云应用包括行动协调的方式很多任务.这些任务都可以是实例运行相同的代码和需要访问相同的资源,或者它们可能是可并行工作,以执行复杂计算的各个部分. 任务实例可能为多的时间自主运行,但它也可能是必要的,以协调各实例的操作,以确保它们