31

我想利用您的智慧为数据仓库系统找到正确的解决方案。这里有一些细节可以更好地理解问题:

数据以星型结构组织,具有一个 BIG 事实和约 15 个维度。
每月 20B 个事实行
10 个维度,百行(有点层次)
5 个维度,数千行
2 个维度,约 200K 行
2 个大维度,50M-100M 行

针对此数据库运行两个典型查询

dimq 中的顶级成员:

select    top X dimq, count(id) 
from      fact 
where     dim1 = x and dim2 = y and dim3 = z 
group by  dimq 
order by  count(id) desc

针对元组的措施:

select    count(distinct dis1), count (distinct dis2), count(dim1), count(dim2),...
from      fact 
where     dim1 = x and dim2 = y and dim3 = z 

问题:

  1. 执行此类查询的最佳平台是什么
  2. 需要什么样的硬件
  3. 它可以托管在哪里(EC2?)


    (请暂时忽略导入和加载问题)

Tnx,
哈盖。

4

7 回答 7

56

我不能强调这一点:获得与现成的报告工具配合得很好的东西。

每月 200 亿行将您置于 VLDB 领域,因此您需要分区。低基数维度也表明位图索引将是性能上的胜利。

  • 忘记云系统(HiveHbase),直到它们拥有成熟的 SQL 支持。对于数据仓库应用程序,您需要与传统报告工具配合使用的东西。否则,您会发现自己永远陷入编写和维护临时报告程序的困境。

  • 数据量可以通过 Oracle 等更传统的 DBMS 进行管理——我知道一家主要的欧洲电信公司每天将 600GB 的数据加载到Oracle数据库中。在所有其他条件相同的情况下,这比您的数据量大两个数量级,因此共享磁盘架构仍然为您提供空间。像NetezzaTeradata这样的无 共享架构 可能会更快,但这些卷的水平并没有超出传统的共享磁盘系统。但请记住,这些系统都非常昂贵。

  • 还要记住 MapReduce不是一种有效的查询选择算法。从根本上说,它是一种分布式蛮力计算的机制。Greenplum 确实有一个 MapReduce 后端,但是一个专门构建的无共享引擎将更加高效,并且可以用更少的硬件完成更多的工作。

我对此的看法是,Teradata 或 Netezza 可能是这项工作的理想工具,但绝对是最昂贵的。 OracleSybase IQ甚至SQL Server也可以处理所涉及的数据量,但速度会慢一些——它们是共享磁盘架构,但仍然可以管理这种数据量。有关 Oracle 和 SQL Server 中 VLDB 相关特性的简要介绍,请参阅这篇文章,并记住 Oracle 刚刚还引入了Exadata 存储平台

我的备份数据包容量计划建议每月大约 3-5 TB,包括 Oracle 或 SQL Server 的索引。尽管在 Oracle 上索引叶具有 16 字节的 ROWID 而在 SQL Server 上具有 6 字节的页面引用,但 Oracle 上的位图索引可能更少。

Sybase IQ 广泛使用位图索引并针对数据仓库查询进行了优化。虽然是共享磁盘架构,但它对于这种类型的查询非常有效(IIRC 它是原始的面向列的架构)。这可能比 Oracle 或 SQL Server 更好,因为它专门用于此类工作。

Greenplum 可能是一个更便宜的选择,但我从未真正使用过它,所以我无法评论它在实践中的效果如何。

如果您有 10 个只有几百行的维度,请考虑将它们合并为一个垃圾维度,这将通过将十个键合并为一个来缩小您的事实表。您仍然可以在垃圾维度上实现层次结构,这将使事实表的大小减少 1/2 或更多,并消除索引对磁盘的大量使用。

我强烈建议您使用与合理横截面的报告工具配合得很好的东西。 这意味着一个 SQL 前端。Crystal Reports 等商业系统允许具有更容易获得的 SQL 技能集的人员完成报告和分析。开源世界也产生了BIRTJasper ReportsPentaho。. Hive 或 HBase 让您从事构建自定义前端的业务,除非您乐于在接下来的 5 年中用 Python 编写自定义报告格式化程序,否则您真的不想要它。

最后,将其托管在您可以轻松从生产系统获取快速数据馈送的地方。这可能意味着您在自己的数据中心拥有自己的硬件。该系统将受 I/O 限制;它对大量数据进行简单处理。这意味着您将需要具有快速磁盘子系统的机器。云提供商往往不支持这种类型的硬件,因为它比这些机构传统上使用的一次性 1U 盒子类型贵一个数量级。快速磁盘 I/O 不是云架构的优势。

于 2008-12-09T21:49:01.247 回答
9

I have had great success with vertica. I am currently loading anywhere between 200 million to 1 billion rows in a day - averaging about 9 billons row a month - though I have gone as high as 17 billion in a month. I have close to 21 dimensions and the queries run blazingly fast. We moved on from the older system when we simply didn't have the windows of time to do the dataload.

we did a very exhaustive trial and study of different solutions - and practically looked at everything on the market. While both Teradata and Netezza would have suited us, they were simply too expensive for us. Vertica beat them both on the price/performance ratio. It is by the way a columnar database.

We have about 80 users now - and it is expected to grow to about 900 by the end of next year when we start rolling out completely.

We are extensively using ASP.NET/dundas/reporting services for reports. It also plays nice with third party reporting solutions - though we haven't tried it.

By the way what are you going to use for dataload ? We are using informatica and have been very pleased with it. SSIS drove us up the wall.

于 2008-12-20T00:50:31.873 回答
3

使用 HBase 和 jasperserver hbase 报告插件,可以创建体面的报告。可以在 HBase 中创建低延迟 OLAP。这将与 SQL 一样工作。Jasperserver HBase 插件提供 Hbase 查询语言,它是一个扩展的 Hbase 扫描命令。

于 2012-10-01T09:23:33.043 回答
2

我很好奇你最后选择了什么。你的问题是 2008 年底的问题。今天情况有所不同,HBase、Greenplum、pig 等提供类似 SQL 的访问权限。

于 2012-01-25T16:22:36.840 回答
2

阅读 Monash 的网站:http ://www.dbms2.com/他撰写有关大型数据库的文章。

也许您可以使用 Oracle Exadata(http://www.oracle.com/solutions/business_intelligence/exadata.htmlhttp://kevinclosson.wordpress.com/exadata-posts/)或者您可以使用 Hadoop。Hadoop是免费的。

于 2008-12-20T00:17:04.187 回答
0

NXC,你确定每天有 6000 亿行吗?即使一行只有一个字节,也就是每天 600 GB 的数据。假设每行 100 字节更合理,我们谈论的是每天 60 TB 的数据,每月 1.8 PB。我真的怀疑是否有人通过 Oracle 抽取了这么多数据。

其他消息来源似乎证实,当数据量达到 2 位 TB 数字时,Oracle 变得非常难以处理。

于 2008-12-12T13:42:38.237 回答
0

少量用户的替代方案是(beowulf)集群。20K 可以为您购买 50 个网络机,每个网络机 500G。这大约是3KW的峰值功率。或 4 个月的云存储。

于 2008-12-11T13:41:20.200 回答