【问题标题】:Transactional table and Reporting table within same database同一数据库中的事务表和报告表
【发布时间】:2012-05-16 04:44:50
【问题描述】:

我确实阅读了有关事务和报告数据库的帖子。 我们有一个用于报告(历史)目的和事务性的表 例如:带字段的顺序
orderid, ordername, orderdesc, datereceived, dateupdated, confirmOrder

把这张表拆分成neworder和orderhistory是个好主意吗 新的订单表记录当天的交易(对于当天收到的订单,每毫秒选择、插入和更新活动。稍后我们将此表与订单历史合并

这是推荐的方法吗? 您认为这会最大限度地减少数据库的负载和处理时间吗?

【问题讨论】:

    标签: database


    【解决方案1】:

    PostgreSQL 支持基本的表分区,它允许将逻辑上的大表拆分为较小的物理块。 More info provided here.

    【讨论】:

      【解决方案2】:

      回答您的第二个问题:不。将数据从一个地方移动到另一个地方是一种额外的负担,如果您使用事务表进行报告,则不会有这种负担。但在做出此决定之前,您还需要问一些其他问题。

      1. 这些报告多久生成一次? 如果您每小时运行一次这些报告,将它们放在同一个表中可能是有意义的。但是,如果此报告需要一段时间才能运行,您需要注意不要占用将其用作事务表的其他客户端的资源。
      2. 这些报告需要保持多久? 如果报告的生成时间少于每天或每周,则报告中的最新数据可能并不重要。

      这就是报表的用武之地。我见过的方法通常涉及拥有一个“数据仓库”,无论是作为单个表还是整个数据库实现。该仓库按计划填充事务表中的数据,随后触发生成报告。这似乎是您建议的方法,并且是完全有效的方法。最终,您需要回答的一个问题是何时您希望您的服务器处理负载。如果这可以在非高峰时段按计划完成,我会说去吧。如果它需要在任何给定时间运行,那么您可能希望保留单表方法。

      当然,没有什么说你不能两者兼得。我见过一些系统,它们具有在事务表上运行的小型按需报告、历史数据的预定仓库以及针对该历史数据的长时间运行的报告。这实际上只是您希望数据的实时性的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-30
        相关资源
        最近更新 更多