Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data warehouse 实现更好的数据库性能_Data Warehouse_Database - Fatal编程技术网

Data warehouse 实现更好的数据库性能

Data warehouse 实现更好的数据库性能,data-warehouse,database,Data Warehouse,Database,我有一个由关系数据库支持的网站,该数据库由常见的电子商务相关表(订单、订单项、购物车、信用卡、付款、客户、地址等)组成 存储的进程。它返回订单历史记录的速度非常慢,这是由于数据量+必须发生的大量连接,并且取决于搜索参数,它有时会超时(尽管索引已经建立) DB模式已经很好地规范化了,我相信我可以通过转向数据仓库之类的东西来实现更好的性能。DW项目并不琐碎,还有保持数据同步的问题,所以我想知道是否有人知道一个快捷方式。可能是一个现成的解决方案,它将创建DW模式并保持数据同步(可能通过触发器)。我听说

我有一个由关系数据库支持的网站,该数据库由常见的电子商务相关表(订单、订单项、购物车、信用卡、付款、客户、地址等)组成

存储的进程。它返回订单历史记录的速度非常慢,这是由于数据量+必须发生的大量连接,并且取决于搜索参数,它有时会超时(尽管索引已经建立)


DB模式已经很好地规范化了,我相信我可以通过转向数据仓库之类的东西来实现更好的性能。DW项目并不琐碎,还有保持数据同步的问题,所以我想知道是否有人知道一个快捷方式。可能是一个现成的解决方案,它将创建DW模式并保持数据同步(可能通过触发器)。我听说过Lucene,但它似乎更倾向于文本搜索和文档管理。有人有其他建议吗?

具体化视图是您可能在Oracle中使用的。它们为您提供了所需的“保持数据同步”功能,以及快速访问聚合数据的功能。由于您没有提到平台的任何细节(平台、服务器规格、行数、每秒点击数等),我真的帮不上什么忙

当然,我们假设您已经检查了所有SQL的编写是否正确和最佳,索引是否正确,在应用程序的所有级别中是否正确使用缓存,DB服务器是否有足够的RAM和高速硬盘等


另外,您是否考虑过对您的模式进行非规范化,以使您能够更快地完成最常见的查询?这比实现一个完整的数据仓库要好,因为它可能根本不是您想要的。通常,数据仓库用于报告目的,而不是为交互式应用提供服务。

在Oracle中可能会使用物化视图。它们为您提供了所需的“保持数据同步”功能,以及快速访问聚合数据的功能。由于您没有提到平台的任何细节(平台、服务器规格、行数、每秒点击数等),我真的帮不上什么忙

当然,我们假设您已经检查了所有SQL的编写是否正确和最佳,索引是否正确,在应用程序的所有级别中是否正确使用缓存,DB服务器是否有足够的RAM和高速硬盘等


另外,您是否考虑过对您的模式进行非规范化,以使您能够更快地完成最常见的查询?这比实现一个完整的数据仓库要好,因为它可能根本不是您想要的。数据仓库通常用于报告目的,而不是为交互式应用提供服务。

您的数据库有多大

实际上并没有任何捷径,但三维建模并没有那么难。首先确定粒度,然后需要确定事实以及与事实相关的维度。然后将维度划分为表,这些表只允许维度随时间缓慢增长。维度的选择是完全实用的,并且基于数据行为

我建议你看看金宝的书

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


因此,虽然DW项目可能并不琐碎,但反规范化技术非常容易实现和可用,而不必构建完整的时不变数据仓库。

您的数据库有多大

实际上并没有任何捷径,但三维建模并没有那么难。首先确定粒度,然后需要确定事实以及与事实相关的维度。然后将维度划分为表,这些表只允许维度随时间缓慢增长。维度的选择是完全实用的,并且基于数据行为

我建议你看看金宝的书

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


因此,虽然DW项目可能并不琐碎,但反规范化技术非常容易实现和可用,无需构建完整的时不变数据仓库。

谢谢Peter。已对查询进行了分析,并添加了适当的索引。不幸的是,我无法更改模式,这就是为什么我对“复制”到一些非规范化的只读结构感兴趣。SQL Server 2008支持物化视图。它们可能值得研究,假设添加它们并不算作“改变模式”。它们是我能想到的最接近复制数据库的“快捷方式”的东西。我创建了一个索引视图(带有SCHEMABINDING),也称为“物化视图”,这非常有帮助。我还调整了SP,因此需要更少的连接。谢谢Peter。已对查询进行了分析,并添加了适当的索引。不幸的是,我无法更改模式,这就是为什么我对“复制”到一些非规范化的只读结构感兴趣。SQL Server 2008支持物化视图。它们可能值得研究,假设添加它们并不算作“改变模式”。它们是我能想到的最接近复制数据库的“快捷方式”的东西。我创建了一个索引视图(带有SCHEMABINDING),也称为“物化视图”,这非常有帮助。我还调整了SP,因此需要更少的连接。