我已经使用 PHP 和 MySQL 构建了一个典型的 Web 应用程序,供企业使用。
MySQL数据库尽量采用3NF。
然而,随着时间的推移,对数据的请求似乎更多地是针对数据仓库,以便他们可以以任何他们想要的方式对数据进行切片和切块。
因此,我拿起了一本书 Kimball Group 的第 3 版数据仓库工具包。
作者在内部描述了 Kimball DW/BI 架构,并为 DW/BI 目的使用星型模式用于维度表和事实表。见下文。
我的问题是,由于我最熟悉 PHP 和 MySQL,我是否应该在与原始 3NF 数据库不同的数据库中拥有数据仓库星型模式?
不会使用商业 BI 工具。任何看起来像 OLAP 或 BI 的东西都可能是我可以扩充自己的开源软件。
请指教。
编辑
我的整个 3NF MySQL 数据库目前大约是 20mb,到目前为止每月增长大约 1mb。
在回复您对我的评论的回复时,我提到了 PostgreSQL 在 DW 工作中的一些亮点——特别是
CTE
s(公用表表达式 - AKAWITH
子句)和窗口函数(AKAOVER
子句)。如果在 MySQL 中没有这些,您最终将编写自己的 hack 来模拟这些(并且,没有不尊重,但您的代码需要一段时间才能消除错误),而使用 PostgreSQL,您可以将它们开箱即用。PostgreSQL 也有更好的
GIS
支持(如果你需要的话)和更好JSON
的——只在 MySQL 中是实验性的。看看这里
DW 类型的应用程序需要的前者远多于后者。
另外,检查一下- 两个系统的最新比较。我对此的看法是 PostgreSQL 是两者中更好的,尤其是。用于 DW 工作。
您可以仔细阅读这些页面以了解PostgreSQL和MySQL功能。这里有一定的“宗教战争”元素,我注意到你已经有 MySQL 经验这对你来说可能是一个关键。祝你的 DW 项目一切顺利。
[编辑回应OP的评论]
我当然会敦促您为您
OLTP
和您的OLAP
工作拥有单独的数据库 - 如果这在您的预算范围内。OLTP
并且OLAP
根本不同,如果将它们混合使用,您将遇到很多冲突-我知道“经理”坚持在白天针对实时系统运行报告所带来的痛苦-因此,如果我是您,我会将 MySQL 作为我的OLTP
系统和 PostgreSQL 作为我的OLAP
.但无论您选择何种配置,我都强烈建议您使用单独的服务器。
如果我被迫选择一个数据库并且只选择一个,我会毫不犹豫地选择 PostgreSQL。在第一次互联网繁荣期间,MySQL 本质上是幸运的,并且在正确的时间和正确的地点使用了正确的软件。恕我直言,PostgreSQL 在技术上无疑是优越的。
我对 MySQL 没有恶意——我用过很多次(客户!),发现如果你能忍受或解决它的怪癖,它的性能会非常好,并且有一些有趣的特性——尤其是可以做出的存储引擎选择(PostgreSQL 不能做到这一点)。
在 MySQL 的 DW 领域中,有两个有趣的发展可能预示着未来在这个领域的好兆头——它们是列存储引擎——Infinidb和Infobright。目前的问题是 Infinidb 似乎已经死了 - 即使代码仍然可用,安装指南已经消失,ICE(Infobright 社区版)本质上是 crippleware。您可能希望评估企业版。
我敦促您设置一些测试用例 - 想象一下您将运行什么样的报告并在两个系统上尝试它们。特别考虑
OLAP
系统所需的复杂报告——我相信你会发现更丰富的 PostgreSQL SQL 语言是一个有说服力的论据。虽然不关注特定的 RDBMS,但对于以下问题:
我会说:绝对是的!
OLTP(您称之为“原始 3NF 数据库”)和 OLAP 是查看数据的非常不同的方式,并且通常对这两个不同的系统有非常不同的期望。因此,有不同的需求导致不同的配置等。
而且,如果严格按照“数据库”一词来解释您的问题,那么您可能意味着在同一台服务器上拥有两个单独的数据库,一个用于 OLTP,一个用于 OLAP,我会澄清我的回答是说您确实需要单独的服务器:
这些是“源交易”/“可操作源系统”
这是“前厅”/“数据展示区”中的“展示区”