2

我为医疗软件实施分析。要处理的数据主要是约会相关的。我计划实施星型模式来生成报告。我有几个疑问

  1. 我的数据可以更改,就像以后可以将约会标记为已取消一样,我读到更改星型模式中的数据不是一个好主意。如果不是什么是更好的方法。
  2. 当数据添加到我的主数据库时,我的事实表中的数据将由后台任务插入。将数据不断插入事实表是否是一个问题,因为几乎可以随时在应用程序中查看转发。
  3. 我打算在 mysql 中实现它,如果有人能指出一些与这种结构的 mysql 性能相关的帖子,那就太好了。还有一个更好的引擎来实现这个模式 Innodb 或 Myisam

谢谢。

4

2 回答 2

3

我将尝试笼统地回答与特定数据库技术无关的问题(我是 MS SQL Server DWH 人员)。

为了解决您的具体问题...

“1.我的数据可以像约会一样更改,以后可以将其标记为已取消,我读到在星型模式中更改数据不是一个好主意。如果不是更好的方法是什么。”

DWHes Fact 表和 Dimension 表中有两种主要的表类型。

在星型模式中更改事实或维度数据是完全有效的。从 DWH 中删除维度记录不是一种好的做法。

您需要选择类型 1(覆盖历史记录)或类型 2(保留历史记录)对数据的更改(渐变维度)。

我不确定您是否建议在此处删除事实记录,但更好的方法是在每个事实记录上设置一个标志以指示约会的状态(已预订/已使用/已取消/等)以及患者是否取消了他们的约会然后将事实记录从状态=预订更改为状态=取消;实际上并未删除事实记录。通过这种方式,您还可以跟踪取消约会的数量。

为了增加复杂性,您还可以让事实表保存历史记录,以便您可以显示“as at”位置,即能够显示数据库在特定时间点的状态。这会大大增加数据库的大小,具体取决于发生的更改数量。

“2.当数据添加到我的主数据库时,我的事实表中的数据将由后台任务插入。不断地将数据插入到事实表中是一个问题,因为几乎可以随时在应用程序中看到转发。”

您需要围绕更新频率/拥有最新数据的重要性进行讨论。通常(我相信您是)DWH 不是 OLTP 系统,因此并不意味着不断更新新数据并能够报告最新数据。如果你真的想要,你需要一个 OLTP 系统。

也就是说,我们已经实现了每 20 分钟更新一次的 DWH。这有一个 SQL DWH,顶部有一个 OLAP 多维数据集。我不确定 mysql 是否有 OLAP 技术,但我确信有一些可用的开源版本。OLAP 有几种风格(MOLAP/ROLAP/HOLAP),它们对性能/数据货币有不同的关注。

您通常希望将 DWH 本身与报告数据库层分开,尤其是在有很多用户的情况下。

“3.我打算在 mysql 中实现它,如果有人能指出一些与这种结构的 mysql 性能相关的帖子,那就太好了。这也是实现这种模式 Innodb 或 Myisam 的更好引擎”

我将不得不传递这个问题。我曾经对 innoDB 和 MyISAM 有所了解,但我使用这项技术已经有 8 年了。

一本关于 Star Schema DWH 设计的非常好的书是Ralph Kimball 在 DWH Design Book 上的

于 2011-06-01T12:01:48.503 回答
2

我会推荐 InnoDb。因为在较新的版本中进行了许多与性能相关的更改(感谢 Google)。大部分更改是在 5.5 版本中完成的,该版本处于 RC 阶段。建议你试试5.5。

http://dev.mysql.com/tech-resources/articles/introduction-to-mysql-55.html

http://dev.mysql.com/doc/refman/5.5/en/mysql-nutshell.html

这是与实施 Star Schema 相关的白皮书,希望对您有用。

http://www.ciobriefings.com/Publications/WhitePapers/DesigningtheStarSchemaDatabase/tabid/101/Default.aspx

于 2010-11-02T12:35:25.630 回答