我们有一个BI客户,每月在其销售数据库中生成大约4,000万行,这些行是根据销售交易生成的。他们希望使用5年的历史数据构建销售数据集市,这意味着该事实表可能会有大约2.4亿行。 (40 x 12个月x 5年)
这是结构良好的数据。
这是我第一次面对这么多数据,这让我分析了像Inforbright这样的垂直数据库工具和其他工具。但是仍然使用这种软件进行简单的查询需要花费很长时间才能运行。
这让我看看Hadoop,但在阅读了一些文章之后,我得出结论,Hadoop不是创建事实表的最佳选择(即使使用Hive),因为我的理解是用于处理非结构化数据
所以,我的问题是:构建这个挑战的最佳方法是什么? ,我不是在寻找合适的技术吗?在一个如此重要的事实表中,我能得到的最佳查询响应时间是多少? ..或者我在这里面对一个真正的墙,唯一的选择是建立聚合表吗?
答案 0 :(得分:4)
您是否检查过适合您需求的Google BigQuery(付费高级服务)?它就像
一样简单以CSV格式加载数据(由记录的新行分隔,或字段的可配置字符分隔)。该文件可以是gzip格式。您还可以附加到现有表。
使用SQL语句开始查询(尽管有限的sql语句),结果以数百万行的秒数返回。
将数据提取到CSV或其他表格(类似于汇总图层)
点击这里。 https://developers.google.com/bigquery/
首先100GB的数据处理是免费的。因此,您现在可以开始使用它并与Google Spreadsheet集成,这将允许您创建图表和图形等可视化管理。您可以将Google电子表格导出为Microsoft Excel / PDF。
Google表示它可以扩展到多个TB,并提供实时查询(几秒响应)。
答案 1 :(得分:2)
首先我假设它的240米不是2400米。
首先来看看ssd.analytical-labs.com
FCC演示在Infobright上运行了一个150米的记录事实表,我怀疑在大众时它会更快。
关键是要保持简单,会有一些查询会让它变慢,但是Largley非常敏感。
我建议您考虑聚合,您查询的方式以及您正在查询的内容。
例如,根据产品,品牌,年份等将其分为Marts。如果用户想要对<1年的数据进行查询(这种情况比大多数人更常见)我想他们可以使用更小的事实表。
存储是吱吱声因此,如果您复制数据,只要它保持响应,则无关紧要。
当然,如果您正在使用OLAP,您可以使用内联聚合表来确保大多数查询在可接受的水平上运行,假设它们已经累计。
硬件也非常重要,请确保您拥有快速磁盘,这几乎总是瓶颈,从磁盘上获取数据的速度越快,对终端用户显示的速度就越快。
模式设计也很重要,现代列存储数据库更喜欢非规范化表,尽可能使用0连接,我在过去发现,有90%的查询有1个非规范化表,然后有几个连接表(日期暗淡为例)对于大多数用例的特殊情况。
无论如何,这是我2美分。如果你想要一个关于它的Skype或其他东西,请在推特上ping我。
汤姆
编辑:
此外,这是一个支持JVD所说的非科学基准:
正如您所看到的,读取速度存在很大差异。
答案 2 :(得分:2)
我认为这里有几种方法,
1)你应该在mondrian上尝试聚合表,聚合表的缺点是你需要事先知道大多数周期性查询的用例,如果你不这样做,那么调整它就不那么容易了,你会结束您没有优化聚合表的查询的响应时间很长。
2)另一种选择是对事实表的数据进行分区,可能按年,为每年创建不同的模式,为整个历史创建虚拟多维数据集。如果您拥有合适的软件,您还可以创建物化视图(如果您有Oracle)或索引视图(如果您有MS SqlServer)。
后期方法对我来说非常有用,查询时间明显改善。此外,我的ETL过程没有受到影响(在选项1中,您将需要创建额外的过程来构建和维护聚合表),因为RDMBS负责更新每个分区上的数据的过程。
答案 3 :(得分:1)
您可能会考虑一个打包的NoSQL / Analysis解决方案,例如DataStax Enterprise,它使用Apache Cassandra与Hadoop配合使用以及其他有用的分析工具。你是对的,Hadoop的“默认”HDFS文件系统非常适合非结构化数据,但是将它与NoSQL数据存储(如Cassandra或HBase)集成将允许您使用MapReduce更容易地分析结构化数据。
答案 4 :(得分:1)
我成功用于大型数据仓库的另一种技术组合是Hadoop + Hive。使用Map / Reduce作业操作数据,并将其作为外部表呈现给Hive。通过在阶段和数据仓库区域之间交换分区来执行更新。
这种方法的一大优点是可以对数据运行(几乎)正常的SQL查询。缺点 - 您无法将Hive后端连接到交互式UI前端。但是,如果你所做的只是运行每日报告和数据挖掘,这应该可行。
答案 5 :(得分:0)
hadoop绝对适合这样的大数据..你可以将它与hbase一起使用,它允许我们扩展到数百万行和数十亿列,并提供出色的水平可扩展性..它适用于实时随机读取写入访问...另一方面,配置单元适用于批处理,因此您可以在后台运行配置单元以执行其他任务。我们不应该将hadoop误认为是传统RDBMS的替代方案,但它确实有助于处理大量数据sets..you可以使用另一个apache项目“sqoop”,它允许我们将现有数据库中的数据导入hadoop集群,而不会有太大的痛苦。