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

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

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


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

背景和问题


许多数据存储通过使用主键组织实体的集合的数据。应用程序可以使用此键来查找和检索数据图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

目录
相关文章
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
377 16
|
存储 人工智能 物联网
云计算助力医疗信息化,推动智慧医疗新模式。
云计算正深刻改变医疗行业,通过高效数据存储、管理与共享,优化医疗资源分配,推动远程医疗发展。它解决了“数据孤岛”问题,强化了数据安全与隐私保护,同时助力智慧医疗建设,降低信息化成本并提升服务效率。未来,云计算将与5G、AI等技术融合,进一步促进医疗服务智能化与规范化,为医疗行业带来全新可能。
812 7
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
373 0
|
设计模式 监控 Java
并发设计模式实战系列(1):半同步/半异步模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第一章半同步/半异步(Half-Sync/Half-Async)模式,废话不多说直接开始~
530 0
|
设计模式 安全 Java
并发设计模式实战系列(12):不变模式(Immutable Object)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第十二章,废话不多说直接开始~
305 0
|
设计模式 前端开发 搜索推荐
前端必须掌握的设计模式——模板模式
模板模式(Template Pattern)是一种行为型设计模式,父类定义固定流程和步骤顺序,子类通过继承并重写特定方法实现具体步骤。适用于具有固定结构或流程的场景,如组装汽车、包装礼物等。举例来说,公司年会节目征集时,蜘蛛侠定义了歌曲的四个步骤:前奏、主歌、副歌、结尾。金刚狼和绿巨人根据此模板设计各自的表演内容。通过抽象类定义通用逻辑,子类实现个性化行为,从而减少重复代码。模板模式还支持钩子方法,允许跳过某些步骤,增加灵活性。
968 11
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
设计模式 算法 Java
设计模式觉醒系列(04)策略模式|简单工厂模式的升级版
本文介绍了简单工厂模式与策略模式的概念及其融合实践。简单工厂模式用于对象创建,通过隐藏实现细节简化代码;策略模式关注行为封装与切换,支持动态替换算法,增强灵活性。两者结合形成“策略工厂”,既简化对象创建又保持低耦合。文章通过支付案例演示了模式的应用,并强调实际开发中应根据需求选择合适的设计模式,避免生搬硬套。最后推荐了JVM调优、并发编程等技术专题,助力开发者提升技能。
|
设计模式
「全网最细 + 实战源码案例」设计模式——模式扩展(配置工厂)
该设计通过配置文件和反射机制动态选择具体工厂,减少硬编码依赖,提升系统灵活性和扩展性。配置文件解耦、反射创建对象,新增产品族无需修改客户端代码。示例中,`CoffeeFactory`类加载配置文件并使用反射生成咖啡对象,客户端调用时只需指定名称即可获取对应产品实例。
343 40
|
设计模式 Prometheus 监控
并发设计模式实战系列(20):扇出/扇入模式(Fan-Out/Fan-In)(完结篇)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第二十章,废话不多说直接开始~
423 0