云计算设计模式(十二)——索引表模式

简介: 云计算设计模式(十二)——索引表模式 创建索引过的被查询条件经常被引用的数据存储等领域。这种模式可以通过允许应用程序更快速地定位数据来从数据存储中检索提高查询性能。

云计算设计模式(十二)——索引表模式


创建索引查询条件经常被引用数据存储等领域这种模式可以通过允许应用程序更快速地定位数据从数据存储中检索提高查询性能。

背景和问题


许多数据存储通过使用主键组织实体的集合的数据。应用程序可以使用此键来查找和检索数据图1显示了一个数据存储区保持顾客的信息的例子主键是客户ID

图1  - 按主键组织的客户信息客户ID


主键是该基于该关键字的值的数据的查询宝贵的,应用程序可能能够使用主键是否需要基于其它字段来检索数据顾客例如,应用程序不能使用该客户ID主键来检索客户,如果通过指定引用的一些其他属性的值在其中客户位于标准查询数据完全要执行一个查询,如这可能需要申请获取并检查每一个客户的记录,这可能是一个缓慢的过程

许多关系数据库管理系统支持二级索引一种二次指数由一个或多个非主(辅助)领域举办一个单独的数据结构,它表示,其中每个索引数据被存储第二索引项目通常排序方法第二个键的值,使数据快速查找。这些指标通常是由数据库管理系统自动进行维护

由于需要支持您的应用程序执行不同的查询,您可以创建任意多个二级指标例如,一个关系数据库中凡客ID是主键的的客户可能是有益的补充辅助指数在域如果应用程序频繁查找的客户其居住小镇。

然而,尽管二级指标关系型系统的共同特征使用云应用大部分NoSQL数据存储不提供同等的功能

解决方案


如果数据存储不支持​​二级索引可以通过创建自己的索引表手动效仿他们索引表由指定的组织数据三种策略通常用于构建一个索引,这取决于所需要的二次索引的数目应用程序执行的查询的性质
重复数据的每个索引表中,而是由不同的密钥(完全非规范化组织它图2显示了索引表组织包括城市和姓氏相同的客户信息

图2 - 索引执行二级指标客户数据数据被复制到每个索引


如果比较时候,它是通过使用每个键查询的数目数据是相对静态的这一策略可能是适当的如果数据是更加动态保持每个索引表的处理开销可能会变得太大,这种方法是有用的。此外,如果数据量非常大,空间来存储重复的数据所需要的量将显著

•创建不同的密钥组织的索引表和通过使用主键而不是重复引用原始数据示于图3的原始数据被称为一个事实表

图3 - 索引执行二级指标客户数据数据是由每个索引表所引用


这种技术可以节省空间,降低了维护的重复数据的开销。缺点是,一个应用程序具有通过使用第二密钥执行两个查找操作以查找数据找到的主键索引表中数据,然后查找在事实表中的数据通过使用主键)。

•创建重复的频繁检索的字段不同的按键组织的部分索引表引用原始数据来访问较少频繁访问的字段。图4示出了这种结构。

图4 - 索引执行二级指标客户数据经常访问的数据是重复的每个索引


使用这种技术,你可以前两种方法之间取得平衡可以快速地检索到通过使用单个查找,常用的查询数据,而空间维护开销一样大,复制整个数据集


如果应用程序通过指定值的组合频繁地查询数据(例如,“查找生活在雷德蒙具有史密斯所有客户,则可以实现索引表中的项目作为一个级联城市属性姓氏属性示于图5中的键排序,然后通过名字为那些具有相同的值的记录。

图5 - 基于复合主键索引表


索引表可以加快分片的数据查询操作在那里碎片密钥散列特别有用图6显示了一个示例,其中分片密钥客户ID的散列。索引表可以散列城市和名字组织数据提供哈希分片作为查找数据这样可以节省重复计算散列键应用(其可以是昂贵的操作,如果它需要检索的数据落在一个范围之内或者它需要读取的数据,以便散列密钥例如诸如“查找生活在雷德蒙所有客户可以通过定位在索引表中的匹配(其全部存储在一个连续的并按照引用客户数据尽快解决的查询使用存储在索引表中碎片的键。

图6  - 索引表中提供了快速查找分片数据

问题和注意事项


在决定如何实现这个模式时,请考虑以下几点
保持辅助索引开销可能是显著你必须分析和了解,您的应用程序使用查询。创建他们很可能被经常使用的索引表。不要投机创建索引的表,以支持应用程序不执行查询或者一个应用程序只执行非常偶然
在索引表中复制的数据所用存储成本维护数据的多个副本所需的工作条件添加显著开销。
•执行一个索引,作为标准化的结构,引用原始数据可能需要的应用程序,以执行两个查找操作以查找数据第一操作搜索索引来检索主键,第二个使用的主密钥来获取数据
•如果系统包含大量索引表非常大的数据集,也可以是难以维持索引表和原始数据之间的一致性。有可能设计围绕最终一致性模型应用例如插入,更新或删除数据一个应用程序可以发送一条消息一个队列,并让一个独立的任务执行操作维护引用该数据不同步索引表。有关实现最终一致性的更多信息,请参阅数据一致性底漆。


注意:

微软Azure存储表支持事务更新同一个分区中保存的数据进行更改(简称实体组的事务如果你可以存储一个事实表和在同一个分区的一个或多个索引表中的数据您可以使用此功能来帮助确保一致性


•索引表可以自行进行分区或分片

何时使用这个模式


使用这种模式来提高查询性能,当应用程序经常需要使用一键以外的主(或子库来检索数据

这种模式可能不适合
数据是不稳定的索引表可能变得过时速度非常快,使其无效,或者使保持在索引表大于制成的任何节省的开销。
选作索引表中的二级密钥的场非常不鉴别,只能有一个小的值的集合(例如,性别)
数据值的选择为一个索引表中的二级密钥的场平衡高度倾斜例如,如果90%的记录中包含相同的值的一个字段,然后创建和维护一个索引中查找基于该字段中的数据可以施加更大的开销比通过数据扫描顺序然而,如果查询非常频繁地针对位于对剩余的10%的值该索引可以是有用的。你必须明白的疑问,您的应用程序正在执行以及如何他们经常执行

例子


Azure存储在云中运行的应用程序提供了一个高度可扩展的键/值数据存储应用程序存储,并通过指定一个检索数据值的数据值可以包含多个字段,但一个数据项的结构是不透明的存储,这仅仅处理一个数据项作为一个字节数组

Azure存储还支持分片分片密钥包括两个元件一个分区键行密钥有相同的分区的数据项都存储在同一分区(碎片),并且项目被存储在一个子库顺序表存储优化用于执行获取数据下降分区中的连续范围键值范围内的查询。如果您正在构建存储Azure的表的信息的云应用应该组织你的数据在考虑这个功能

例如,考虑存储有关电影的信息的应用程序应用程序经常按流派查询电影(动作片,纪录片历史喜剧戏剧等等可以通过使用类型作为分区并指定电影的名称作为行密钥创建一个天青的分区的每个类型如图7

 

图7  - 存储在Azure Table中的电影数据按流派划分排序的电影名称


这种方法不太有效,如果该应用程序还需要通过演员主演查询电影。在这种情况下可以创建一个单独的Azure作为一个索引表分区键是演员和行关键是电影的名字对于每个演员的数据将被存储在单独的分区。如果一个电影明星不止一个演员,同一部电影出现多个分区

可以通过采用上面的解决方案部分中所述的第一种方式重复每个分区中保存的值电影数据然而很可能是每个影片将(对于每个演员一次)重复几次所以它可能是更有效的,以部分非规范化,以支持最常见的查询(如其他演员的姓名数据,并实现一个应用程序包括必要找到在体裁分区完整信息,分区键来检索任何剩余的细节这种方法是通过在解决方案部分中的第三项中的说明图8描述了这种方法。

图8  - 演员分区作为索引表影像数据

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

目录
打赏
0
0
0
0
20
分享
相关文章
设计模式:工厂方法模式(Factory Method)
工厂方法模式是一种创建型设计模式,通过将对象的创建延迟到子类实现解耦。其核心是抽象工厂声明工厂方法返回抽象产品,具体工厂重写该方法返回具体产品实例。适用于动态扩展产品类型、复杂创建逻辑和框架设计等场景,如日志记录器、数据库连接池等。优点包括符合开闭原则、解耦客户端与具体产品;缺点是可能增加类数量和复杂度。典型应用如Java集合框架、Spring BeanFactory等。
「全网最细 + 实战源码案例」设计模式——生成器模式
生成器模式(Builder Pattern)是一种创建型设计模式,用于分步骤构建复杂对象。它允许用户通过控制对象构造的过程,定制对象的组成部分,而无需直接实例化细节。该模式特别适合构建具有多种配置的复杂对象。其结构包括抽象建造者、具体建造者、指挥者和产品角色。适用于需要创建复杂对象且对象由多个部分组成、构造过程需对外隐藏或分离表示与构造的场景。优点在于更好的控制、代码复用和解耦性;缺点是增加复杂性和不适合简单对象。实现时需定义建造者接口、具体建造者类、指挥者类及产品类。链式调用是常见应用方式之一。
59 12
|
2月前
|
「全网最细 + 实战源码案例」设计模式——模式扩展(配置工厂)
该设计通过配置文件和反射机制动态选择具体工厂,减少硬编码依赖,提升系统灵活性和扩展性。配置文件解耦、反射创建对象,新增产品族无需修改客户端代码。示例中,`CoffeeFactory`类加载配置文件并使用反射生成咖啡对象,客户端调用时只需指定名称即可获取对应产品实例。
90 40
「全网最细 + 实战源码案例」设计模式——工厂方法模式
简单工厂模式是一种创建型设计模式,通过一个工厂类根据传入参数创建不同类型的产品对象,也称“静态工厂方法”模式。其结构包括工厂类、产品接口和具体产品类。适用于创建对象种类较少且调用者无需关心创建细节的场景。优点是封装性强、代码复用性好;缺点是扩展性差,增加新产品时需修改工厂类代码,违反开闭原则。
56 15
「全网最细 + 实战源码案例」设计模式——简单工厂模式
简单工厂模式是一种创建型设计模式,通过工厂类根据传入参数创建不同类型的对象,也称“静态工厂方法”模式。其结构包括工厂类、产品接口和具体产品类。优点是封装性强、代码复用性好;缺点是扩展性差,增加新产品时需修改工厂类代码,违反开闭原则。适用于对象种类较少且调用者无需关心创建细节的场景。
64 19
前端必须掌握的设计模式——模板模式
模板模式(Template Pattern)是一种行为型设计模式,父类定义固定流程和步骤顺序,子类通过继承并重写特定方法实现具体步骤。适用于具有固定结构或流程的场景,如组装汽车、包装礼物等。举例来说,公司年会节目征集时,蜘蛛侠定义了歌曲的四个步骤:前奏、主歌、副歌、结尾。金刚狼和绿巨人根据此模板设计各自的表演内容。通过抽象类定义通用逻辑,子类实现个性化行为,从而减少重复代码。模板模式还支持钩子方法,允许跳过某些步骤,增加灵活性。
158 11
2024.11|云计算行业的商业模式创新方法及实践
截至2024年,全球云计算行业迈入全新阶段,从IaaS到大规模AI模型平台,技术与商业模式不断创新。本文分析全球最新技术进展,探讨云计算商业模式创新策略与实践,解析云服务厂商如何通过技术革新实现价值最大化,推动企业数字化与智能化转型。重点讨论AI与云计算的深度融合、边缘计算与去中心化发展、平台化与生态系统建设,以及数据安全与绿色云计算等关键议题。
227 30
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
68 1
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等