当前位置: 代码迷 >> 数据仓库 >> 了, 请教数据仓库技术可以解决,海量数据的查询效率有关问题吗
  详细解决方案

了, 请教数据仓库技术可以解决,海量数据的查询效率有关问题吗

热度:496   发布时间:2016-05-05 16:16:57.0
高分求教了, 请问数据仓库技术可以解决,海量数据的查询效率问题吗?
对数据仓库不甚了解,但是碰到了如下问题,不知道怎么解决.

大型电子商务平台,比如像阿里巴巴那样,达到几千万上亿的数据量,
1 浏览任何分类都能统计出所浏览的分类的数据量,它包含哪些下级分类,以及每个下级分类的数据量,
2 输入关键字查询的话,也能显示出那些包含关键字的分类,以及满足条件的数据量,
(注:它们的统计数据有时看起来不是很真实<实时>,但总的说来差别非常小.比如,经常看到类似这样的情况,某个分类的统计数据显示有123,但真正浏览页面查看时,只浏览到121条.)

在我们自己的设计中,采用常见的分类统计的查询语句(大致用这样的语句去查询:select ... from ... where ... group by ... order by ...),以及我们的硬件环境下,表数据量到100W时,查询速度就很难受了.已经做过了索引优化.

请问,像阿里巴巴那样很快的显示出统计数据,需要采用数据仓库技术吗?或者是别的技术?大至的情况如何?

------解决方案--------------------


建议看一下数据仓库的原理。 所谓data warehouse或data mart 其实就是预先把这个交易数据记录提练成按不同维度的不同粒度的数据。这样当然就快了。

你的100W条交易记录,按照事先确定的方法,在数据仓库中可能也就几百条,或者几千条记录。
------解决方案--------------------


数据仓库

数据仓库是一个面向主题的、集成的、不可更新的、随时间不断变化的数据集合,它用于支持企业或组织的决策分析处理。

数据仓库,英文名称为Data Warehouse,可简写为DW
  数据仓库之父Bill Inmon在1991年出版的“Building the Data Warehouse”一书中所提出的定义被广泛接受——数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。

  ◆面向主题:操作型数据库的数据组织面向事务处理任务,各个业务系统之间各自分离,而数据仓库中的数据是按照一定的主题域进行组织的。
  ◆集成的:数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。
  ◆相对稳定的:数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。
  ◆反映历史变化:数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。


从功能结构化分,数据仓库系统至少应该包含数据获取(Data Acquisition)、数据存储(Data Storage)、数据访问(Data Access)三个关键部分。



------解决方案--------------------


  设计数据仓库的九个步骤
  1)选择合适的主题(所要解决问题的领域) 
  2)明确定义fact表 
  3)确定和确认维 
  4)choosing the facts 
  5)计算并存储fact表中的衍生数据段 
  6)roundingoutthedimensiontables 
  7)choosingthedurationofthedatabase 
  8)theneedtotrackslowlychangingdimensions 
  9)确定查询优先级和查询模式。 

------解决方案--------------------


1\我需要先明确,数据仓库技术能不能解决前面所提到的实际需求
-- 能。
2\如果能,我就往数据仓库方面深入,如果不能的话,我得寻找其他的解决方案
-- 如果只是为了这个,数据仓库就有些大材小用了。 你只要把常用的查询归纳一下,然后把这些记录每天自动的预处理一下。比如你的界面是有按商品名称查询。 则事先准备一张 
 商品名称,已销售数量 这样的表.这样当用户查询时,你只要直接从这张表中取数据就行了。
------解决方案--------------------
针对你说的情况,数据仓库不能完全解决你的问题,但同时数据仓库是你解决这个问题的第一步。

也就是说,你需要
1、首先建立数据仓库,以用来数据清洗,同时保证大数据量查询的时候,不会影响业务数据库。
2、建立OLAP,也就是多维数据集,这个部分是将大量的合计和计算进行预先的加总,并且更改为多维度的存储模型,以实现从不同的维度快速的切入和展开。
3、建立终端展示平台,用来让最终使用者方便的查询和分析


其实说白了就是需要一个商业智能体系(也就是BI系统),所有大容量数据的机构,BI体系都是必不可少的系统,金融保险行业中,商业智能就是标配,随着其他行业的发展,现在各个行业都开始关注Bi系统了。感兴趣的话可以查查看这方面的资料
------解决方案--------------------


如果查询都只是根据品名,分类来查。那就设计表

分类一,分类二,分类三, 数量
板鞋 鞋 成品鞋 871378
跑步鞋 鞋 成品鞋 646451
....

这样你的记录也就是商品最小分类的数量。每天,或每小时在后台利用程序更新一下。 而用户查的时候就快了。
------解决方案--------------------
我可以肯定的说,商业智能可以解决你所说的需求,不过商业智能系统的成本比较高,是属于平台性的系统,架上商业智能体系后,还可以不断的扩充不同的应用在这个平台上。

我给你举个例子看看商业智能应用后的效果(这个效果是在建立数据仓库和OLAP之后,使用前端展示工具的效果):
(见鬼的CSDN不让我传图片,用开心网上的相册吧)
上图左边的树形结构就是统计分析中的不同统计角度



上图表示出,通过拖拽,将统计的数据和统计的角度分别拉到报表中去,注意,由于有OLAP的支持,各种统计角度可以灵活的组合出你需要的报表



而你说的千变万化的条件的查询,对于商业智能体系来说,不过是最基本的功能(如上图),由于是经过多维化的处理,查询的速度肯定是可以符合用户的要求,不过也是有条件的,如果用户查询的是非常明细的数据,查询的速度也会相应的变慢,这个要看具体的项目使用具体的解决办法

------解决方案--------------------