社区
Power Linux
帖子详情
nosql适合OLAP吗 ?
开发运营者
2016-08-25 09:50:26
求指教:nosql适合OLAP吗 ?谢谢!
...全文
1466
1
打赏
收藏
nosql适合OLAP吗 ?
求指教:nosql适合OLAP吗 ?谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dingybin
2016-09-12
打赏
举报
回复
使用OLAP有三个过程。一是定义一个立方体(定义CUBE),然后填充数据(打CUBE),最后查询数据(使用MDX或其他语言)。 定义立方体的时候可以设计一个XML的配置文件,通过这个文件来定义一个CUBE。需要的要素包括CUBE的名称,存储的HBASE的表名,维度信息,度量信息等,完善点的话可能还有权限信息和其他管理性内容。 然后就是打CUBE了。需要从关系数据库中将包含维度和度量的笛卡尔宽表通过SQOOP软件或者其他数据库提供的接口导入到HDFS上,并通过PIG或者HIVE来完成立方体的棱的计算。原始信息和计算后的信息填充到HBASE的表中供访问。当然另外一种可能的方法是计算不要放在Hadoop中,而是在数据库中做好,具体那种方式更加高效低成本也许需要放到实际的项目中才知道,但是我直观上认为在Hadoop上做更好,因为简单嘛。 最后是查询CUBE了。通过一个解释器将前台发来的MDX或其他查询语言进行翻译,然后通过API去HBASE数据库中取得对应的结果,最后返回。这个方式看起来简单,其实还是有一些需要考虑的。那就是是否所有的查询在之前都预先计算过了,如果是,那直接取得那一个单元格即可,如果没有,还需要将对应的维度的数据全部取出来,重新预计算一次,再返回。这个时候或许可以考虑将计算后的结果写会HBASE,供下次查询的时候使用。其实Mondrian的方法类似于此。到底哪些要预计算,哪些不要,则取决于需求,可以在设计立方体的时候制定,或者系统自动调整。 以最简单的两个维度一个度量来举例。具体的打CUBE的流程可能如下: 1、在事实表中,可能有如下数据: 时间 地域 收入 2009 北京 1W 2009 上海 2W 2010 北京 3W 2010 上海 4W 2、这些数据被按照代码的方式抽取到HDFS上,然后进行预先计算,第一层预计算添加了如下行 2009 ALL 3W 2010 ALL 7W ALL 北京 4W ALL 上海 6W 3、第二层预计算添加了如下行 ALL ALL 10W 4、由于只有两个维度,预计算结束,然后原始数据和两次预先计算后的数据一并录入到HBASE中,KEY为时间+地区,VALUE为收入。 在查询的时候按照进行返回,没有在WHERE条件中的维度用ALL代替就可以了,很简单的不是。如果没有预计算的,那么就需要返回所有满足条件的度量,然后自己聚合起来。 通过这样的方式将需要大量聚合的查询通过预计算的方式转移成了几乎单条的查询,可以充分利用HBASE低时延和高吞吐的能力。而预计算本省则通过Hadoop的MapReduce来实现高效处理,自己实现MR如果困难的话,也可以用PIG嘛,那个简单,搞个脚本就行,上面指出的一个开源软件似乎就是使用的PIG脚本生成器然后解释执行的。 只不过这是最简单的方法而已,如果需要考虑动态维度的话,恐怕是将共性维度作为KEY,然后再用一个COLUMN FAMILY来存动态的维度,对于动态维度的预计算也需要考虑,因为查询语言的翻译可能会根据CUBE的定义而变得复杂一些。具体的我还没有进行过仔细的思考。 最后在设计上,有一个细节需要考虑,我们可能会面临很多的度量,我们系统中的指标可能有成百上千。这些指标可能本身就是“稀疏”的。所以我们应该设计一个指标维度的维度,而仅保留两个度量即可,一可以累加的,二不可累加的。也就是增加一个KPI_NAME的维度,其中的值就是KPI_ID。这样可能更加简单一些。 通过上述的方法,在NOSQL数据库上可以构建一个提供指标库访问服务的OLAP系统。既可以直接为指标库服务,也可以提供标准的MDX服务,为原来那些前台软件的多维分析服务。
关系型数据库和非关系型数据库的区别
而
NoSQL
数据库是横向扩展的,非关系型数据存储天然就是分布式的,
NoSQL
数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。关系型和非关系型数据库的主要差异是数据存储的方式。非关系型数据库一般强调的是数据最终一致性,而没有像ACID一样强调数据的强一致性,从非关系型数据库中读到的有可能还是处于一个中间态的数据,因此如果业务对于数据的一致性要求很高,那么非关系型数据库并不是一个很好的选择,非关系型数据库更多的偏于
OLAP
场景,而关系型数据库更多偏向于OLTP场景。
MySQL和HBase的对比
同时提供高度多样性,能够提供很多不同的使用者介面,包括命令行客户端操作,网页浏览器,以及各式各样的程序语言介面,例如C+线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。(存储计算分离),支持海量数据读写(尤其是写),支持上亿行、上百万列的,面向列的分布式
NoSql
。因为数据和数据是有关系的,底层是运行了大量的算法,大量算法会降低系统的效率,会降低性能。非关系数据库没有关系,没有强大的事务关系,没有保证数据的完整性和安全性。,主从架构,不支持事务,不支持二级索引,不支持sql。
关系型数据库和非关系型数据库的区别是什么?
非关系型数据库一般强调的是数据最终一致性,而没有像ACID一样强调数据的强一致性,从非关系型数据库中读到的有可能还是处于一个中间态的数据,因此如果业务对于数据的一致性要求很高,那么非关系型数据库并不一个很好的选择,非关系型数据库更多的偏向于
OLAP
(联机分析处理)场景,而关系型数据库更多偏向于OLTP(联机事务处理)场景。而
NoSQL
数据库是横向扩展的,非关系型数据存储天然就是分布式的,
NoSQL
数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
NOSQL
数据库性能对比
NOSQL
数据库性能对比 MongoDB 优点: 1:MongoDB最大的特点是表结构灵活可变,字段类型可以随时修改。 2:全索引支持,查询非常高效。 3:面向文档(BSON)存储,数据模式简单而强大。 缺点: 1:多表查询、复杂事务等高级操作支持不是很友好。因此,如果数据的逻辑结构非常复杂,经常需要进行复杂的多表查询或者事务操作,那显然还是MySQL这类关系型数据库更合适。 2:单个文档大小限制为16M,32位系统上,不支持大于2.5G的数据 3:对内存要求比较大,至少要保证热.
数据库选型入门必读:如何在眼花缭乱的产品中挑出最
适合
业务的?
摘要:多花功夫,“因地制宜”选择最
适合
的数据库很重要。 互联网+AI时代,随着业务场景越来越复杂,各种开源和商业数据库品类繁多,让不少开发者眼花缭乱,无从下手。 业界有句俗语,任何脱离业务来谈架构都是瞎扯。所以用户在数据库选型时,需要从自身业务架构、业务数据量、数据类型、甚至团队成员的业务能力等多角度平衡,考量应该选择何种数据库。 那么,我们到底该如何根据每种数据库的特性选择最
适合
自己业务的? 强调事务,选它 首先谈谈应用最广泛的关系型数据库,关系型数据最大的特点便是事务,它能保证数据始终如一的一
Power Linux
745
社区成员
900
社区内容
发帖
与我相关
我的任务
Power Linux
该论坛主要探讨Linux系统在IBM Power平台的安装、部署、应用开发等话题,并为网友们提供自由交流的平台。
复制链接
扫一扫
分享
社区描述
该论坛主要探讨Linux系统在IBM Power平台的安装、部署、应用开发等话题,并为网友们提供自由交流的平台。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章