热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

BI笔记之合理处理SSAS数据库的几点建议

BI笔记之---合理处理SSAS数据库的几点建议今天又有朋友遇到SSAS数据库处理速度慢的情况,主要是由于数据聚合量确实很大,每次处理都要超过三十分钟&

BI笔记之---合理处理SSAS数据库的几点建议


今天又有朋友遇到SSAS数据库处理速度慢的情况,主要是由于数据聚合量确实很大,每次处理都要超过三十分钟,有没有什么方法能让处理的时间少一些呢?

从事BI工作有七个年头了,这样类似的问题绝对可以排在职业圈内TOP 10的FAQ当中。这样的问题往往都略有复杂,在此根据遇到过的一些场景,罗列一些自己的经验。

由于篇幅限制,这里只介绍遇到问题时的解决思路,详细的操作我会链接到我的其它随笔供大家实际操作的时候参考,还有很多建议上的细节都尽量标出官方文档的出处供大家获取更多内容。

 

 

提升数据仓库层相关表的查询效率

SSAS数据库在处理时,要向数据仓库层抛SQL查询。所以对相应的维表和事实表进行优化是这一步的关键。

我先前见过一个情况,就是有一个项目的事实表是一个视图,而这个视图里有比较复杂的运算和连接。所以每次处理多维数据集的时候,都要等查询要准备好久才开始读取数据。后来我建议定期把视图里的数据放到一张表里,保证每次读事实表的数据不用经过视图而是直接读已经处理好的数据。

这是最简单直接的方法,将事实表的数据"实体"化,让视图中的数据计算一次然后将结果保存到表中,以保证后续的查询分析应用都可以快速的得到结果。

剩下的就是基本的数据库优化,比如索引优化等,此外还有大数据解决方案如HADOOP或者PDW等,这部分的内容已经远远超出了本文所描述的范围,这里不再做详细讲解。

 

 

增量更新

这是最常用的一个方法。假如每个周期产生的数据量是100mb,那么在刚开始的几个处理周期里可能不会有问题,但假如说你的处理周期是每周或者每天,那么随着时间的推移你的历史数据会越来越多,每次都全量处理就不是很明智。所以我们就需要用增量的方法来处理数据。

在SSAS中,增量处理需要指定增量查询。也就是说,需要你有一个严格的数据流程。首先,增量处理之前,你需要把增量数据预备好,在增量处理完之后,还需要妥善的处理增量数据(比如在表或者视图中),避免重复进行的增量处理导致数据翻番。

如果数据仓库有更新的情况,可以在设计数据仓库的时候考虑1-1+1的方案。具体方法这里只说一个思路,大家可以根据自己系统的情况进行设计。

具体的参考流程,可以参考我先前的一个笔记:

BI笔记之---增量方式处理多维数据集

这篇将介绍如何生成测试数据然后利用这些测试数据演示如何做基本的数据增量更新,同时也会让你对多维数据集的增量更新有一个了解。

 

 

建立分区

跟数据库里的表一样,SSAS的多维数据集也可以建立分区。理论上来说,建立分区对数据的处理速度不会有太大的影响,但是之所以放在这里,是由于,可以借助分区的方式,来间接的实现"增量更新"。

上一步对增量更新的介绍,你可以看到实际操作起来是有多复杂。借助分区的方式,你就可以多少偷一下懒。具体的思路就是,把多维数据集按照某一维度进行分区,时间或者空间的方式均可。比如按照时间的方式,以月为粒度进行分区。然后在每次处理的时候,只处理增量数据点所在的那个分区。

这个方法的关键点就是如何自动的识别出那个待处理的分区。我个人认为主要在于多维数据集的设计要完全按照一个严格的标准。比如对分区名称有一个严格的命名规范,以让代码可以很容易的找到这个分区。

具体的操作方法,可以参考我先前的一个随笔:

BI笔记之---Cube增量处理的一个场景的处理方案

里面主要介绍了用编程的方法来根据指定的规则,找到待处理的分区,然后对其进行处理。

Cube的分区大小到底设置多大才合适,这个问题经常被问到。在这里文档中有一处可以参考:

将超过 2 千万行或大小超过 250 MB 的大分区拆分为较小的分区以改进性能

出处:

http://technet.microsoft.com/zh-cn/library/bb630302(v=sql.105).aspx

这里仅是一个大体的参考,数据行数还需要具体考察每一行的数据两大小。

 

 

合理设置维度属性

合理设置维度属性关系,设置刚性或者柔性关系类型。这里主要摘录微软文档中的内容进行简单的介绍。

关于属性维度属性的关系,摘录文档中的一句话:

属性关系具备以下优点:

减少维度处理所需的内存量。 加快维度、分区和查询的处理速度。

提高查询性能,因为存储访问速度更快而且执行计划更优化。

如果用户定义的层次结构是沿关系路径定义的,则聚合设计算法会选择更有效的聚合。

引用地址:

http://technet.microsoft.com/zh-cn/library/ms174878.aspx

关于刚性和柔性关系的说明,摘录文档中的一句话:

指示成员关系是否随时间而更改。 值为 Rigid 和 Flexible,前者表示成员之间的关系不随时间而更改,后者表示成员之间的关系随时间而更改。 默认值为 Flexible。 如果您将关系定义为 Flexible(柔性),则将删除聚合并作为增量更新的一部分重新计算(如果只添加了新成员,则将不删除聚合)。 如果您将关系定义为 Rigid(刚性),则 Analysis Services 会在增量更新维度时保留聚合。 如果定义为刚性的关系发生了实际更改,Analysis Services 会在增量处理过程中生成错误。 指定适当的关系和关系属性,可提高查询和处理性能。

引用地址:

http://technet.microsoft.com/zh-cn/library/ms176124.aspx

总体来说,通过属性关系和关系类型的设置,虽然对处理时间的影响不见得最明显,但这都是设计SSAS数据库的一个很好的标准和习惯。

 

 

数据粒度提升

有很多项目为了能让数据仓库足够"大",会把数据的粒度收集的足够细。比如某系统一天收集的数据量就有一个G。而浏览了所有报表之后,发现报表中大多数的时间粒度都是到月,只有部分是到天的。

当然,我不否认数据粒度越细,越容易发现更有用的信息。但是对于SSAS数据库这层,对于通常的统计分析,对数据粒度要求不高,可以考虑将事实数据GROUP到上一级的粒度,比如秒到小时,或者小时到天,依次降低事实数据的数量。

对于确实需要小粒度统计分析的,建议只保留近段时间的数据就可以,这样通常都可以满足大部分需求。而粒度上升到什么层次才合适,建议根据实际的需求然后重新考察数据粒度的确定是否合适。

总之,原则就是,在资源有限的情况下,尽量"把钱用在刀刃上",然后根据不同需求的不同特点,再去做单独的设计。

 

 

数据样本抽取

在开发和测试过程中,没有必要直接把全部的历史数据拿过来做测试。这主要是因为在各个环节中都可能要消耗很多时间等待,后续的开发和测试发现失败或者有错误后,将流程进行修正,还需要再重新完整的跑一遍。

你可以认为,一个流程只要一个晚上能处理完,到第二天上班时能看到结果就可以了。但是,如果后续的测试验证数据流程有bug,那么就意味着还要跑一个晚上,这样项目进度很难保证。即使是一个要跑一个小时的流程,你可以算算一天有几个小时可以反复的开发和测试然后又去验证这个过程呢?

所以这里建议在开发和测试的过程中,只拿一小部分数据,比如在10年的数据中,只取一年或者一个月的,或者在所有产品品牌中,只取一个或者几个品牌做整个项目的BI流程测试,最后验证的也只是这一小部分数据,等这些小数据处理成功后,再去处理完整的数据。

数据的抽取方法,可以在数据源视图中进行限制,也可以通过分区来动态控制。我个人建议选择前者,操作起来比较容易些,不需要经常更改Cube的结构。

 

 

总结:

解决处理慢的问题,基本上就是从性能,方法和设计上下手,根据不同的场景可以选择不同的方案。

此外,可以参考这篇《设计警告规则(Analysis Services - 多维数据)》

http://technet.microsoft.com/zh-cn/library/bb630321(v=sql.105).aspx

总之,解决问题的方法很多,这里只列举一些比较常见的问题以及我个人的建议,其它有代表性的问题也欢迎大家列出来在这里做进一步的探讨。

最后,希望这篇对大家有帮助。



推荐阅读
  • Nacos 0.3 数据持久化详解与实践
    本文详细介绍了如何将 Nacos 0.3 的数据持久化到 MySQL 数据库,并提供了具体的步骤和注意事项。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • Spring 切面配置中的切点表达式详解
    本文介绍了如何在Spring框架中使用AspectJ风格的切面配置,详细解释了切点表达式的语法和常见示例,帮助开发者更好地理解和应用Spring AOP。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • SSAS入门指南:基础知识与核心概念解析
    ### SSAS入门指南:基础知识与核心概念解析Analysis Services 是一种专为决策支持和商业智能(BI)解决方案设计的数据引擎。该引擎能够为报告和客户端应用提供高效的分析数据,并支持在多维数据模型中构建高性能的分析应用。通过其强大的数据处理能力和灵活的数据建模功能,Analysis Services 成为了现代 BI 系统的重要组成部分。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
author-avatar
李瑶626
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有