数据仓库:一个数据库还是多个?

时间:2010-05-24 17:01:59

标签: data-warehouse netezza database-design

在我的新公司,他们将与数据仓库相关的所有数据(包括导入,登台,审计,维度和事实表)保存在同一个物理数据库中。

我多年来一直是数据库开发人员,这种功能和形式的整合似乎与我所知道的一切相反。

似乎会使安全性,备份/恢复和性能管理问题更加手动密集。

这是在业内完成的吗?是否有充分理由做或不做?

该平台是Netezza。大小是太字节,数十亿行。

我希望从这个问题的答案中得到的是对这条道路的正确与错误的充分理解。根据您的经验,我应该关注的问题是什么,如果这是一条会给我们带来麻烦的道路。如果没什么大不了的话,那我也想知道。

6 个答案:

答案 0 :(得分:1)

一般情况下,我建议使用单独的数据库。这是我一直看到的在生产中使用的配置,它真的很有意义,因为 - 如你所提到的 - 两个数据库都有根本不同的用途/使用模式/等。

答案 1 :(得分:1)

我们为每个细分使用数据库(INVENTORY,CRM,BILLING ......)。没有性能缺点和维护,概述要好得多。

答案 2 :(得分:1)

迟到总比没有好,但对于Netezza来说:

查询跨数据库时没有性能命中。 Netezza仅允许SELECT个操作跨数据库,不允许INSERTUPDATEDELETE语句。

这意味着您无法做到:

THISDB(ADMIN)=>INSERT INTO OTHERDB..TBL SELECT * FROM THISDBTABLE;

但您可以\c OTHERDB然后

OTHERDB(ADMIN)=>INSERT INTO TBL SELECT * FROM THISDB..THISDBTABLE;

您也无法在跨数据库对象上创建实例化视图,例如: OTHERDB(ADMIN)=>CREATE MATERIALIZED VIEW BLAH AS SELECT * FROM THISDB..THISDBTABLE;

管理可能是您将决定要创建的数据库类型的地方(尽管您可能已经在很久以前做过)。根据您的基础设施,您可能在同一个盒子上或在单独的盒子上有一个TEST / QA系统和一个PROD系统。

答案 3 :(得分:0)

修改

如果您使用的是一台物理服务器,则该服务器上的实例越少,管理越简单,流程效率就越高。

如果您将TWO实例放在同一个物理服务器上,则可以获得:

否定:

  1. 使用的内存的一半
  2. 数据库进程数量的两倍
  3. 肯定:

    1. 您可以在不影响DW
    2. 的情况下关闭整个登台数据库

      那么哪个更珍贵,中断窗口或CPU和内存?

      在物理服务器上,多个实例会使性能管理问题变得更加手动解决。如果您查看其中一个实例的运行状况,它可能看起来很好但是用户报告性能不佳,因此您必须查看下一个实例以查看问题是否可能来自那里......等等每个实例

      多个实例的安全性也更难。充其量它就像单个实例一样难,但它永远不会更容易。您将拥有两个管理员帐户(SYS或其他),重复的流程帐户等。

      告诉我们为什么你认为拥有多个实例会更好。

      原始邮寄

      我们能否明确条款。当您说“在同一个数据库中”时,您的意思是说同一个实例,或同一个物理服务器。如果您确实将登台移动到新实例,它是否会驻留在同一个物理硬件上?

      我认为人们对实例有点过分了。如果您要在同一块硬件上放置两个实例,那么您只需将所有内容的数量增加一倍即可。所有服务器进程都将运行两次......所有内存池都将减少一半。

      所以让我们说你真的意味着两个独立的物理盒......

      假设您购买2个12路盒子(就是说)。当您正在暂停数据库服务器当天完成时,那12个CPU正在浪费。当您的用户打包并回家​​时,您的prod DW CPU正在浪费。 CPU周期易腐烂,你无法取回它们。但是,如果您有一个24路盒子......那么分段DB可以在晚上使用20个CPU来进行一些出色的并行执行来构建汇总表,并且您的用户将在白天拥有双倍的流程容量。

      所以让我们说你的意思是相同的硬件。

        

      “它似乎使安全性,备份/恢复和性能管理问题更加手动密集。”

      保证性能问题难以解决共享相同硬件的更多实例。保证。

        

      安全

      您在实例级别做了什么安全措施?

        

      备份

      您在实例级别备份了什么DW?你不是备份表空间,而是整个实例?似乎该模式将失败一定的大小。

      PLATFORM:NETEZZA

      具体不熟悉该工具。因此,如果它是单个盒子上的单个实例,那么除法似乎比物理更合乎逻辑,因此它们存在的原因是管理,而不是性能。您不会通过添加数据库来增加CPU或内存,对吧?所以它似乎并没有表现出来的好处。每个数据库可能正在添加单独的进程(性能命中),或者它可能完全符合Oracle中的模式。如果每个数据库都由新进程管理,那么它们之间的数据就意味着IPC。

      也许添加Netezza标签会有所吸引力。

答案 4 :(得分:0)

如果表位于同一模式(数据库)中,您将在加载和输出中获得速度。显而易见......但是嘿,我说了。

您在一个架构中放置的表越多,开销越大。备份时间,备份大小,易用性。

我在哪里,我们在一个数据仓库中有许多多个TB数据库。我们的经验法则是,单个加载过程或单个报表查询不应跨越数据库。这使得“喜欢”表保持在一起,但为我们的备份和应急流程提供了一些限制。它还使“查找”数据更容易。

对于需要违反此规则的进程,我们将数据从一个数据库移动到另一个数据库,或允许进程跨模式进行连接。

我对Netezza并不熟悉,所以我不能完全确定你的选择是什么。

答案 5 :(得分:0)

您需要考虑的几点 a)如果必须加入一个或多个登台,审计,维度和事实表中的数据,最好将它们保存在一个数据库中

b)通常,您将在同一数据库中保留维度表和事实表,并在最常连接的列上进行分发,以利用Netezza的“共存联接”功能

c)您应该能够使用SQL授予权限来管理对所有对象(数据库,表,视图等)的访问