5

我们有一个 BI 客户,每月在他们的销售数据库表中生成大约 4000 万行,这些行是从他们的销售交易中生成的。他们想用他们 5 年的历史数据建立一个销售数据集市,这意味着这个事实表可能有大约 2.4 亿行。(40 x 12 个月 x 5 年)

这是结构良好的数据。

这是我第一次面对如此大量的数据,这让我分析了 Inrbright 等垂直数据库工具。但是使用这种软件,一个简单的查询仍然需要非常非常长的时间来运行。

这让我看了一下 Hadoop,但在阅读了一些文章后,我得出结论认为 Hadoop 不是创建事实表的最佳选择(即使使用 Hive),因为在我的理解中是用于处理非结构化数据。

所以,我的问题是:建立这个挑战的最佳方式是什么?,我不是在寻找合适的技术吗?在如此大的事实表中,我可以获得的最佳查询响应时间是多少?..或者我在这里面对一堵真正的墙,唯一的选择是建立聚合表?

4

6 回答 6

4

您是否查看过适合您需求的 Google BigQuery(付费高级服务)。这很简单

  1. 以 CSV 格式加载数据(由记录的新行或字段的可配置字符分隔)。该文件可以是 gzip 格式。您还可以附加到现有表。

  2. 使用 SQL 语句(虽然有限的 sql 语句)开始查询,结果以数百万行的秒数返回。

  3. 将数据提取到 CSV 或其他表中(类似于聚合层)

看看这里。https://developers.google.com/bigquery/

用于数据处理的前 100GB 是免费的。所以你现在就可以开始了,它还与谷歌电子表格集成,这将允许你创建图表和图形等可视化来进行管理。您可以将谷歌电子表格导出为 Microsoft Excel / PDF。

谷歌表示它可以扩展到多兆字节并提供实时查询(几秒的响应)。

于 2012-06-08T01:24:08.480 回答
2

首先,我假设它的 240m 而不是 2400m。

首先看看 ssd.analytical-labs.com

FCC 演示在 Infobright 上运行了一个 150m 的记录事实表,我怀疑在 VW 上它会更快。

关键是保持简单,会有一些查询使它变慢,但它的响应速度非常快。

我建议您考虑聚合、查询的方式以及重要的是您查询的内容。

例如,根据性能、产品、品牌、年份等将其拆分为 Marts。如果用户只想对价值不到 1 年的数据进行查询(这种情况比大多数人想的要多) ) 然后他们可以使用更小的事实表。

存储很便宜,所以只要它保持响应,复制数据就没有关系。

当然,如果您正在执行 OLAP,您可以使用内联聚合表来确保大多数查询运行在更可接受的级别(假设它们已经汇总)。

硬件也很重要,确保你有快速的磁盘,这几乎总是瓶颈,你从磁盘上获取数据的速度越快,通常它显示给最终用户的速度就越快。

架构设计也很重要,现代列存储数据库更喜欢在可能的情况下使用 0 个连接的非规范化表,我过去发现,90% 的查询有 1 个非规范化表,然后有一些连接表(例如日期暗淡)用于大多数用例的特殊情况都很重要。

无论如何,那是我的 2 美分。如果你想要关于它的 Skype 或其他什么,请在 twitter 上联系我。

汤姆

编辑:

这里还有一个非科学基准来支持 JVD 所说的话:

  • 物理盒上的 ssd:175.67 MB/秒
  • 物理盒上的 sata:113.52 MB/秒
  • ec2:75.65 MB/秒
  • ec2 ebs 突袭:89.36 MB/秒

如您所见,读取速度存在很大差异。

于 2012-06-07T19:05:46.750 回答
2

我认为这里有几种方法,

1)您应该在mondrian上尝试聚合表,agg表的缺点是您需要事先了解大多数重复查询的用例,如果您不这样做,那么调整它就不那么容易了,您最终会花费很长时间您未优化聚合表的查询的响应时间。

2)另一种选择是对事实表的数据进行分区,可能按年份,为每年创建不同的模式,为整个历史创建一个虚拟多维数据集。如果您有正确的软件,您还可以创建物化视图(如果您有 Oracle)或索引视图(如果您有 MS SqlServer)。

后期的方法对我来说效果很好,查询时间有显着改善。此外,我的 ETL 过程没有受到影响(在选项 1 中,您需要创建一个额外的过程来构建和维护聚合表),因为 RDMBS 负责更新每个分区上的数据的过程。

于 2012-06-07T22:34:09.550 回答
1

您可能会考虑打包的 NoSQL/分析解决方案,例如DataStax Enterprise,它使用 Apache Cassandra 与 Hadoop 和其他有用的分析工具配对。没错,Hadoop 的“默认”HDFS 文件系统非常适合非结构化数据,但是将其与 NoSQL 数据存储(如 Cassandra 或 HBase)集成将使您能够更轻松地使用 MapReduce 分析结构化数据。

于 2012-06-07T18:50:49.083 回答
1

我成功用于超大型数据仓库的另一种技术组合是 Hadoop + Hive。使用 Map/Reduce 作业处理数据,并作为外部表呈现给 Hive。通过交换阶段和数据仓库区域之间的分区来执行更新。

这种方法的一大优势是可以对数据运行(几乎)正常的 SQL 查询。缺点 - 您无法将 Hive 后端连接到交互式 UI 前端。但是,如果您所做的只是运行每日报告和数据挖掘,那么这应该可行。

于 2012-06-07T19:31:34.943 回答
0

hadoop 绝对适合这样的大数据。你可以将它与 hbase 一起使用,它可以让我们扩展到数百万行和数十亿列,并且还提供了很好的水平扩展性。它适用于实时随机读写访问。 .另一方面,hive 适合批处理,因此您可以在后台运行 hive 作业以执行其他任务..我们不应将 hadoop 误认为是传统 RDBMS 的替代品,但它确实有助于处理庞大的数据集..您可以使用另一个 apache 项目“sqoop”,它允许我们将现有数据库中的数据导入到 hadoop 集群,而不会有太大的痛苦。

于 2012-06-07T19:05:25.673 回答