其实他们的意思是什么?我找到的关于他们的所有文章都没有给我一个想法,或者我的知识太不足以理解它.
有人会给我一些资源,我可以从头学到这些资源.
我一直认为数据库应该针对读取性能进行非规范化,因为它是为OLAP数据库设计完成的,而不是为OLTP设计进一步夸大3NF.
PerformanceDBA在各种帖子中,例如,在基于时间的数据的不同方法的表现中,捍卫了数据库应该总是通过归一化到5NF和6NF(正规形式)来精心设计的范例.
我是否理解正确(以及我理解的是什么)?
OLAP数据库(低于3NF)的传统非规范化方法/范例设计有什么问题,以及3NF足以满足大多数OLTP数据库实际情况的建议?
例如:
我应该承认,我永远无法理解非规范化有助于读取性能的理论.任何人都可以给我参考,对这个和相反的信念有很好的逻辑解释吗?
在试图说服我的利益相关者说OLAP/Data Warehousing数据库应该规范化时,我可以参考哪些来源?
为了提高可见度,我从评论中复制了这里
"如果参与者在他们看到或参与过的6NF中添加(披露)有多少现实生活(没有包含科学项目)的数据仓库实施,那将是一件好事.快速集合.Me = 0." - Damir Sudarevic
维基百科的数据仓库文章告诉我们:
"标准化的方法[与Ralph Kimball的维度相比],也称为3NF模型(第三范式),其支持者被称为"Inmonites",相信Bill Inmon的方法,其中声明数据仓库应该是使用ER模型/标准化模型建模."
看起来规范化的数据仓库方法(Bill Inmon)被认为不超过3NF(?)
我只是想了解数据仓库/ OLAP是非规范化的同义词的神话(或无处不在的公理信念)的起源是什么?
达米尔苏达雷维奇回答说他们铺好了道路.让我回到这个问题:为什么反规范化被认为有助于阅读?
任何人都可以解释数据仓库和OLAP多维数据集之间的真正区别吗?
他们对同样的事情有不同的看法吗?
其中一个与其他人相比是否被弃用?
其中一个是否有任何性能问题?
欢迎任何解释
我一直在努力让聚合表工作.这是我的事实表看起来像:
employment_date_id
dimension1_id
dimension2_id
dimension3_id
dimension4
dimension5
measure1
measure2
measure3
Run Code Online (Sandbox Code Playgroud)
我将employment_date_id年度,季度和月份折叠成仅包括年份,但包括其他所有列.这是我的聚合表的样子:
yearquartermonth_year
dimension1_id
dimension2_id
dimension3_id
dimension4
dimension5
measure1
measure2
measure3
fact_count
Run Code Online (Sandbox Code Playgroud)
我只是把日期的那一部分搞砸了.其余字段保持原样.这是我的配置:
<AggFactCount column="FACT_COUNT"/>
<AggForeignKey factColumn="dimension1_id" aggColumn="dimension1_id"/>
<AggForeignKey factColumn="dimension2_id" aggColumn="dimension2_id"/>
<AggForeignKey factColumn="dimension3_id" aggColumn="dimension3_id"/>
<AggMeasure name="[Measures].[measure1]" column="measure1"/>
<AggMeasure name="[Measures].[measure2]" column="measure2"/>
<AggMeasure name="[Measures].[measure3]" column="measure3"/>
<AggLevel name="[dimension4].[dimension4]" column="dimension4"/>
<AggLevel name="[dimension5].[dimension5]" column="dimension5"/>
<AggLevel name="[EmploymentDate.yearQuarterMonth].[Year]" column="yearquartermonth_year"/>
Run Code Online (Sandbox Code Playgroud)
我大部分都是从文档中复制聚合表的第二个例子.我的大多数列都没有折叠到表中,而是维度表的外键.
我正在尝试执行的查询是这样的:
select {[Measures].[measure1]} on COLUMNS, {[EmploymentDate.yearQuarterMonth].[Year]} on ROWS from Cube1
Run Code Online (Sandbox Code Playgroud)
问题是,当我调试它并打开日志记录时,我看到看起来像这样的位键:
AggStar:agg_year_employment
bk=0x00000000000000000000000000000000000000000000000111111111101111100000000000000000000000000000000000000000000000000000000000000000
fbk=0x00000000000000000000000000000000000000000000000000000001101111100000000000000000000000000000000000000000000000000000000000000000
mbk=0x00000000000000000000000000000000000000000000000111111110000000000000000000000000000000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
我的查询的位模式是:
Foreign columns bit key=0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
Measure bit key= 0x00000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000 …Run Code Online (Sandbox Code Playgroud) 有没有人有使用PostgreSQL进行OLAP设置,使用多维数据集对数据库等的经验.在使用MySQL for OLAP时遇到了许多特性,是否有理由支持使用PostgreSQL(假设我想要开放)来源路线)?
经过多年的关系数据库开发,我目前正在学习OLAP和MDX.
关于MDX入门的任何提示?学习MDX的最佳书籍和资源是什么?
我对数据库内部有一点了解.我之前实际上已经实现了一个小而简单的关系数据库引擎,使用磁盘上的ISAM结构和BTree索引以及所有类似的东西.这很有趣,也很有教育意义.我知道我更加认识到仔细设计数据库模式和编写查询,因为我对RDBMS如何工作有了更多了解.
但我对多维OLAP数据模型一无所知,而且我很难在互联网上找到任何有用的信息.
如何将信息存储在磁盘上?多维数据集包含哪些数据结构?如果MOLAP模型不使用表,列和记录,那么......什么?特别是在高维数据中,哪种数据结构使MOLAP模型如此高效?MOLAP实现是否使用类似于RDBMS索引的东西?
为什么OLAP服务器在处理即席查询时要好得多?可以在OLTP多维数据集中以毫秒为单位处理在普通关系数据库中可能需要数小时处理的相同类型的聚合.该模型的基本机制是什么使这成为可能?
在过去,我曾经使用在MySQL上运行的OLAP多维数据集构建WebAnalytics.现在我使用OLAP多维数据集的方式只是一个大表(好吧,它比那更智能地存储),其中每一行基本上是一个测量或聚合的测量集.每个度量都有一堆维度(即哪个页面名称,用户名,ip等)和一堆值(即多少个综合浏览量,多少访问者等).
您在这样的表上运行的查询通常采用以下形式(meta-SQL):
SELECT SUM(hits), SUM(bytes),
FROM MyCube
WHERE date='20090914' and pagename='Homepage' and browser!='googlebot'
GROUP BY hour
Run Code Online (Sandbox Code Playgroud)
因此,您可以使用上述过滤器获取所选日期中每小时的总计.一个障碍是这些立方体通常意味着全表扫描(各种原因),这意味着你可以制作这些东西的尺寸(在MiB中)的实际限制.
我正在学习Hadoop等的来龙去脉.
在BigTable上运行上述查询作为mapreduce看起来很容易:只需将'小时'作为键,在地图中过滤并通过对值进行求和来减少.
您是否可以在"实时"(即通过用户界面和用户得到他们的答案,而不是批处理模式)上运行BigTable类型的系统上面(或至少具有相同输出)的查询?
如果不; 在BigTable/Hadoop/HBase/Hive等领域做这样的事情的适当技术是什么?
我正在使用Analysis Services,在设计维度时,我无法确定构建自然层次结构还有多远.
我的意思是我添加了所有真正的属性关系.因此,大多数层次结构都是自然的,但最常请求的层次结构是3个或更多级别,中间级别是缓慢变化的属性.
该方案是跟踪工作.该工作有许多属性都是静态的,但债务人属性(即谁支付发票)可以在工作过程中发生变化.所以层次结构看起来像这样
- Manager -> Debtor -> Job Name
- Director -> Debtor -> Job Name
- Office -> Debtor -> Job Name
- Office -> Manager -> Debtor -> Job Name
Run Code Online (Sandbox Code Playgroud)
因此,在维度内,有许多层次结构以作业的静态属性开始,后面是债务人(缓慢变化),底部是作业名称(维度键).
因此,我们目前所做的"自然化"这些层次结构的是为每个债务人创建"假"属性,这些属性出现在层次结构中,该层次结构是其上方的属性的组合.例如,对于上面的第一个示例,Debtor级别属性将具有Manager和Debtor id的密钥.对于最后一个示例,Manager级别将具有Manager和Office的密钥,而Debtor级别属性将具有Office,Manager和Debtor的密钥.然后,我们隐藏所有这些属性,以便它们仅用于层次结构中.
因此,这使我们的维度变得更加复杂,但我们确实在查询中获得了额外性能的好处.这通常是一个显着的进步.除了复杂性之外,我们经常遇到问题,因为我们现在有多个版本的"债务人",而属性的关键不是债务人的身份.因此,如果我们想要更改某些级别的行为,这会影响钻取和报告操作以及使某些类型的计算更加困难.
我们使用的客户端是Reporting Services,Excel和Office Web Components.
有人告诉我,在SQL 2005的早期版本中,涉及非自然层次结构的复杂查询可能会导致服务器完全绑定,这是我们为避免不自然的层次结构而付出很大努力的另一个原因.
此外,感叹号设计警告在Visual Studio中如此引人注目,以至于拥有不自然的层次结构似乎是一件非常糟糕的事情.
在这些情况下,其他设计师会做些什么?你要走多远才能避免不自然的等级制度?
由于我是SSAS的新手,一直在阅读有关多维OLAP多维数据集的文章,并且正在努力理解多维数据集概念,有人说虽然术语"立方体"表示三维,但立方体最多可以有64维.你能解释一下这在立方体上是如何实现的(除了3-Dim例子x,y,z平面)?请不要只提供学习的链接,但也希望得到一些解释.