实现更好的数据库性能

时间:2010-07-08 20:56:39

标签: data-warehouse database

我有一个由关系数据库支持的网站,该数据库由通常的电子商务相关表(Order,OrderItem,ShoppingCart,CreditCard,Payment,Customer,Address等)组成。

存储过程。由于数据量+必须发生的大量连接,返回订单历史记录的速度非常缓慢,并且根据搜索参数,它有时会超时(尽管索引已到位)。

数据库架构已经很好地规范化了,我相信通过转向类似数据仓库的方式,我可以获得更好的性能。 DW项目并不简单,然后就是保持数据同步的问题所以我想知道是否有人知道快捷方式。也许是一个开箱即用的解决方案,它将创建DW模式并使数据保持同步(也许通过触发器)。我听说过Lucene,但似乎更倾向于文本搜索和文档管理。有没有人有其他建议?

2 个答案:

答案 0 :(得分:1)

您的数据库有多大?

实际上没有任何捷径,但尺寸建模并不是那么难。您首先确定粮食,然后需要确定您的事实和与事实相关的维度。然后将尺寸划分为表格,使您可以使尺寸随时间缓慢增长。维度的选择是完全实用的,并且基于数据行为。

我建议你看一下Kimball的书。

对于几GB的数据库,当然可以每天多次从头开始更新报告数据库(没有历史记录,只需从3NF重新填充相同数据的不同模型)。有一些实时数据仓库技术可以在一天中持续应用变化。

因此,虽然DW项目可能并不简单,但非规范化技术非常易于使用,无需构建完整的时间不变数据仓库。

答案 1 :(得分:0)

物化视图是您在Oracle中可能使用的视图。它们为您提供了“保持数据同步”功能,并且可以快速访问聚合数据。由于您没有提及平台的任何细节(平台,服务器规格,行数,点击次数/秒等),因此我无法提供更多帮助。

当然,我们假设您已经检查过所有SQL的编写是否正确且最佳,索引是否正确,您是否在应用程序的所有级别正确使用缓存,您的数据库服务器是否有足够的RAM ,快速硬盘等。

另外,您是否考虑过对模式进行非规范化,足以更快地提供最常见的查询?这比实现整个数据仓库更好,这可能甚至不是你想要的。通常,数据仓库用于报告目的,而不是用于提供交互式应用程序。