Questions tagged «data-warehouse»

为报告(特别是汇总报告)而优化的数据库系统。通常但并非总是使用星型模式来实现。

5
有什么方法可以在数据仓库中实现多对多关系?
数据仓库建模的主要拓扑(星型,雪花型)在设计时考虑了一对多关系。当面对这些建模方案中的多对多关系时,查询的可读性,性能和结构会严重下降。 有什么方法可以实现维度之间或事实表与数据仓库中的维度之间的多对多关系,它们在必要的粒度和查询性能方面会造成什么折衷?


3
集群列存储索引和外键
我正在使用索引对数据仓库进行性能优化。我对SQL Server 2014相当陌生,Microsoft描述了以下内容: “我们将群集列存储索引视为存储大型数据仓库事实表的标准,并期望在大多数数据仓库场景中使用该索引。由于群集列存储索引是可更新的,因此您的工作负载可以执行大量的插入,更新,和删除操作。” http://msdn.microsoft.com/en-us/library/gg492088.aspx 但是,如果您进一步阅读文档,则会发现存在以下限制和限制: “不能具有唯一性约束,主键约束或外键约束。” 这让我很困惑!出于各种原因(数据完整性,语义层可见的关系...),在数据仓库中具有外键是一种很好的做法(不是强制性的) 因此,Microsoft提倡针对数据仓库方案使用集群列存储索引。但是,它不能处理外键关系?! 我对此是否正确?您还建议其他哪些方法?过去,我在数据仓库场景中使用了非集群列存储索引,并为数据负载进行了删除和重建。但是,SQL Server 2014然后没有为数据仓库添加任何真正的新价值?

1
使用SQL Server 2016系统版本的时态表进行慢速变化维度的查询策略
当使用系统版本的时态表(SQL Server 2016中的新增功能)时,当此功能用于处理大型关系数据仓库中的维缓慢变化时,查询创作和性能含义是什么? 例如,假设我有一个Customer带有Postal Code列的100,000行维,一个Sales带有CustomerID外键列的数十亿行事实表。并假设我要查询“按客户的邮政编码进行的2014年销售总额”。简化的DDL就是这样(为了清楚起见,省略了许多列): CREATE TABLE Customer ( CustomerID int identity (1,1) NOT NULL PRIMARY KEY CLUSTERED, PostalCode varchar(50) NOT NULL, SysStartTime datetime2 GENERATED ALWAYS AS ROW START NOT NULL, SysEndTime datetime2 GENERATED ALWAYS AS ROW END NOT NULL, PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime) ) WITH (SYSTEM_VERSIONING = ON); …

2
开源商业智能/ DWH解决方案
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 4年前关闭。 我想知道还没有问过这个问题。Google对我来说只有极少数的结果没有显示出高质量的工具 有哪些针对数据仓库,更具体地说是商业智能工具的开源(也可以免费使用)解决方案?您对他们有什么经验。我的硕士课程中有一门课程,我们与MS Business Intelligence和MSSQL一起用作数据仓库存储。现在,我想使用“开放式”工具深入了解该主题。 是否有任何可比较的商业智能工具(大多与数据库无关),您对它们有任何经验吗? 编辑玛丽安(Marian)对斯蒂芬妮(Stephanie)的回答时,我发现我把问题提成错误。我知道DWH只是“报告优化”的数据库,Stephanie对此的解释很清楚。我对如何使用哪种类型的BI软件/工具/其他技术将数据转换为这种优化形式感到更感兴趣。

3
比较两个相似的Postgres数据库的差异
我偶尔以Postgres dBs的形式下载可公开获得的数据集。这些数据集由存储库主机随时间更新/修改/扩展。 是否有Postgres命令或工具(最好是FOSS)可以显示旧的和新的Postgres数据库之间的差异?(一个可行的假设是95%的条目未更改,并且表和关系也未更改)。

2
星型模式数据仓库中动态字段的EAV替代品
我需要在大型数据仓库中支持动态字段和值以存储API请求日志,而我的用例是我需要存储所有API请求查询字符串,并在将来能够对其进行查询(因此,不仅仅是存储,所以我不能为他们使用blob) 例如 http://example.com/?action=test&foo=abc&bar=def... 我需要存储所有field => value映射,即(action => test), (foo => abc), (bar => def),由于该字段是动态的,所以我发现的唯一解决方案是使用Entity-Attribute-Value,但是,人们一直说这是一个非常糟糕的设计。 因此,考虑以上我的用例,什么是EAV的合适替代方案? 我当前使用KAV的架构 表requests (id, timestamp, uri) 例如(1, 149382220, '/') 表params (request_id, key, value) 例如(1, 'action', 'test'), (1, 'foo', 'abc'), (1, 'bar', 'def') 有什么建议么? 更新:我们在AWS RedShift上运行仓库

2
ETL:从200个表中提取-SSIS数据流或自定义T-SQL?
根据我的分析,我们数据仓库的完整维模型需要从200多个源表中提取。这些表中的某些将作为增量负载的一部分被提取,而另一些则将作为全负载。 需要注意的是,我们有大约225个具有相同模式的源数据库。 从我所看到的,在具有OLE DB源和OLE DB目标的SSIS中构建简单的数据流要求在设计时确定列和数据类型。这意味着仅用于提取,我最终将获得200多个数据流。 从可维护性的角度来看,这是我遇到的一个大问题。如果需要对提取代码进行某种彻底的更改,则必须修改200个不同的数据流。 另一个选择是,我编写了一个小脚本,该脚本读取要从一组元数据表中提取的源数据库,表名和列。该代码在多个循环中运行,并使用动态SQL通过链接服务器和OPENQUERY从源表中提取。 根据我的测试,这仍然不及将SSIS数据流与OLEDB源和目标一起使用的速度。所以我想知道我有什么样的选择。到目前为止的想法包括: 使用EZAPI以编程方式生成具有简单数据流的SSIS包。要提取的表和列将来自前面提到的相同的元数据表。 购买第三方软件(动态数据流组件) 解决此问题的最佳方法是什么?当涉及到.NET编程时,我是一个初学者,因此仅考虑基础知识所需的时间也是一个问题。

1
我应该在数据仓库中禁用“自动更新统计信息”吗?
我在SQL Server中有200 GB的数据仓库。 对于某些查询,我的执行时间一直很慢;例如12个小时的简单delete查询inner join。 在对执行计划进行了一些研究之后,我使用该WITH FULLSCAN选项更新了查询中涉及的2个表的统计信息。 现在查询将在不到一秒钟的时间内执行,因此看来统计信息不是最新的。 我正在考虑禁用auto update statistics数据库,并UPDATE STATISTICS在加载数据仓库后手动运行。每天晚上,从源ERP系统增量加载数据仓库。 我假设auto update statistics在数据仓库场景中不是真的有用吗?相反,加载数据后手动更新统计信息是否更有意义?

2
在数据集市/仓库中处理时区
我们正在开始设计数据集市/仓库的构建基块,我们需要能够支持所有时区(我们的客户来自世界各地)。从在线(和在书中)阅读讨论中,一个常见的解决方案似乎是在事实表中具有单独的日期和时间维度以及时间戳。 但是,我很难回答的问题是,考虑到我的动态时区要求,日期和时间维度实际上对我有什么好处?时间维度更有意义,但我在日期维度方面遇到了麻烦。日期维度的一般设计方法通常包括属性,例如天名称,星期几,月名称等。我所遇到的问题是,2013年12月31日(星期二)UTC的11:00 PM是星期三,2014年1月1日,位于UTC + 2之后的所有时区。 因此,如果我将不得不对每个查询(和报告)进行所有这些时区转换,那么拥有和存储我可能永远不会使用的这些属性(看起来像)有什么意义呢?有人建议在每个时区都有事实行,但这对我来说似乎很荒谬。我们需要每月能够存储数百万条记录。 其他人则建议有一个时区桥接表,尽管这在一定程度上是有意义的,但似乎也很复杂,需要进行额外的连接才能完成我的客户端应用程序和报告应该可以从某个日期轻松确定的事情(报告主要基于网络)那里有许多库可帮助您转换,显示和格式化日期)。 我唯一能想到的是按日期和小时分组的简便性和可能的​​性能,但实践的糟糕之处在于按日期部分分组(我们正在使用MS SQL,但我们将查询数百万行)或我们应该考虑只是非常简单的日期和时间维度,而在大多数情况下,如星期一之类的大多数文字,时,日,月和年的数字最多不超过几小时,那么在时区发挥作用时就没有多大意义了?

2
SQL Server数据压缩绝对适合只读数据库吗?
我读过一些有关SQL Server数据压缩的文献,指出写入成本增加到通常需要的四倍。似乎还暗示这是数据压缩的主要缺点,强烈暗示对于只读存档数据库,使用100%填充页面的数据压缩将提高性能(仅少数例外)。 以上陈述正确吗? 数据压缩与其他方式(用于读取)之间的主要“差异”是什么? “ CPU + x%”? “ IO -y%”? 页面拆分发生了吗? tempdb的用法? RAM使用率? 和写作? 出于这个问题的目的,您可以将上下文限制为大型(> 1TB)数据库的PAGE级压缩,但是始终欢迎其他注释。 参考文献: SQL Server存储引擎博客(DW场景显示压缩非常有优势) 数据压缩:策略,容量规划和最佳实践 确定压缩内容的更详细方法涉及分析每个表和索引的工作负载特征。它基于以下两个指标: U:相对于该对象的总操作数,特定表,索引或分区上的更新操作数的百分比。U的值越低(即不经常更新表,索引或分区),则它越适合用于页面压缩。 S:表,索引或分区上的扫描操作相对于该对象上的全部操作的百分比。S的值越高(即,表,索引或分区大部分被扫描),则用于页面压缩的候选值越好。 以上两种情况都明显偏向于建议为DW样式的数据库建议页面压缩(读密集型/排他性大数据操作)。

2
PostgreSQL,用于大量交易和数据仓库
对PostgreSQL来说是个新手,我以前从未使用它进行过大规模部署。但是,我在企业解决方案方面有丰富的经验,我想尝试应用一些我在PostgreSQL中学到的知识。 我有一个可以处理大量数据和流量的站点。该基础设施将使用EC2实例和EBS卷在亚马逊(AWS)上构建。 该设计应具有两个数据库,一个主要的事务数据库和一个处理分析和报告的数据仓库。 主要交易数据库 将用于实时网站,该网站建立在多个节点上以扩大并发用户。主要是因为我们要求这种情况下的数据库在读取操作中要非常快,我们希望数据大于100GB,并且每年以30%的速度增长。此时,我们计划使用两台EC2服务器(并在以后根据需要添加更多服务器)。 我的问题是,上述要求的推荐设置是什么?另外,有没有一种方法可以管理表和卷分区?有使用AWS设置的建议吗? 数据仓库数据库 将主要用于在时间维度上捕获来自主事务数据库的所有数据。因此,即使从主数据库中删除的记录也将被捕获在DWH中。因此,数据将非常庞大,增长将更大。如果需要,我们还将使用几个EC2实例或更多实例。 在这种情况下,推荐的设置是什么?由于持续写入(ETL),因此需要快速写入操作。我们可以在PostgreSQL中构建OLAP多维数据集吗?如果是,有没有人尝试过? 连接数据库 Web服务器将连接到主数据库以进行查询和写入。我们目前正在使用django开发应用程序,该应用程序使用本机库进行连接。是否建议使用相同的基本方法?还是应该配置pgpool? 数据仓库(ETL) 建立ETL流程以从主数据库读取并加载到数据仓库的推荐方法是什么?有什么工具吗?遵循的方法?PostgreSQL是否在构建ETL流程中提供了任何有用的功能/工具?

1
限制可用于任何查询的并行度(DOP)
在Oracle Exadata(11gR2)上,我们有一个相对强大的数据库。 cpu_count是24 parallel_server_instances是2 parallel_threads_per_cpu为2 我们注意到,通过在Oracle企业管理器(OEM)中进行的观察,由于查询是按顺序执行的,因此性能很差。为了解决这个问题,所有表,实例化视图和索引都进行了更改,以利用并行性。例如: ALTER TABLE SOME_TABLE PARALLEL (DEGREE DEFAULT INSTANCES DEFAULT); 更改了系统以打开并行化: ALTER SYSTEM SET PARALLEL_DEGREE_POLICY = 'AUTO'; 这样可以提高性能,但是我们有时在OEM中观察到,单个查询将占用DOP 96(所有可用资源)。这导致随后的查询降级为DOP 1(无并行化)。导致性能下降,直到搜索查询完成。 为了解决这个问题,我们尝试通过以下方式限制可用于任何查询的DOP: ALTER SYSTEM SET PARALLEL_DEGREE_LIMIT = 24; 这没有效果。我们经常观察到将使用超出限制的查询(通常为48或96,但没有实际模式)。 我们如何防止任何单个查询占用所有可用资源?

2
数据仓库设计,用于针对多个时区的数据进行报告
我们正在尝试优化数据仓库设计,以支持针对许多时区的数据进行报告。例如,我们可能有一个关于一个月活动的报告(数百万行),该报告需要显示按一天中的小时分组的活动。当然,一天中的那个小时必须是给定时区的“本地”小时。 当我们仅支持UTC和一个本地时间时,我们的设计效果很好。事实表上的UTC和本地时间的日期和时间维度的标准设计。但是,如果我们必须支持100多个时区的报告,则该方法似乎无法扩展。 我们的事实表将变得非常广泛。另外,我们还必须解决SQL中的语法问题,即指定在报告的任何给定运行中使用哪个日期和时间ID进行分组。也许是一个非常大的CASE语句? 我已经看到了一些建议,可以按您覆盖的UTC时间范围获取所有数据,然后将其返回到表示层以转换为本地并在那里进行汇总,但是使用SSRS进行的有限测试表明这将非常慢。 我也参考了一些有关该主题的书籍,它们似乎都说只有UTC并可以进行转换,或者只有UTC和一个本地语言。将不胜感激任何想法和建议。 注意:此问题类似于:在数据集市/仓库中处理时区,但是我无法对此问题发表评论,因此感到这是值得的。 更新:在 Aaron进行了一些重大更新并发布了示例代码和图表之后,我选择了Aaron的答案。我先前对他的答案的评论不再有意义,因为它们涉及答案的原始编辑。如果有必要,我会尝试再次更新此内容

2
100 TB容量数据库-资源和时间估计
我正在为100TB报告数据库设置进行“封底”计算。我正在从这里的专家那里寻找想法。建议环境: 储存容量〜100TB 表约200个,大小从1G​​B到5TB不等。平均大小可能在100GB-200GB之间 ETL-作业可能需要在10亿个行的表之间进行联接,联接键的范围从10字节到500字节。这样的加入应在2-5分钟内完成 实时选择-最初仅对选择速度感兴趣。应该支持500次选择/秒。“每秒更新数”相对较小,因此在本练习中可以忽略。 需要24x7的可用性。2个独立的DB服务器应可用于服务选择调用(复制数据)。 问题: 目前,我正在研究Oracle。您在大型数据库的其他商业(或)开源解决方案方面的经验如何? 您认为哪种硬件操作系统最有效?我正在计划在Dell上使用Linux。 网络存储(例如NetApp)是否必须?您预计使用现成的商用磁盘会有哪些问题? 硬件和操作系统准备就绪后,您将留出多少时间来设置,配置数据库,存储等。 在您观察到的环境中,哪种团队组成最有效?我的意思是,管理和操作此类设置所需的各种管理员(OS Admin,Oracle DB Admin?)。要实现24x7的正常运行时间,可能需要多少个。 数据库许可,网络存储成本的任何近似值/范围。 我知道我没有所有的环境细节。我不是在寻找确切的细节,一个近似值就足够了。尽管某些问题可能最好由经理回答,但我对Admins的观点很感兴趣。感谢您的投入。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.