【问题标题】:Are staging tables / staging databases an anti-pattern?临时表/临时数据库是反模式吗?
【发布时间】:2010-10-12 14:12:18
【问题描述】:

当 rpc(如 Java RMI 或某种 Web 服务调用)或消息队列(如 JMS)是更好的解决方案时,暂存表是否是一种反模式,或者暂存可以更好地解决问题表?

澄清一下:

暂存表是指记录由一个或多个进程附加到一个或多个表的情况,然后由第二个或多个进程读取并对其进行操作。我不是指那些旨在反映间隔结束状态(一天结束、支付期结束等)的表格。在大多数情况下,登台表的模式非常模仿应用程序数据类型,例如客户或帐户。

这种反模式的潜在原因:

1) 两个流程所有者之间的业务单元墙可防止写入或读取暂存的流程被修改。

2) 对 staging 写入或读取的进程信心不足导致开发人员使用 table 来防止“以防万一发生故障”的数据丢失

3) 缺乏知识或 DGAS(不要给出 ^%$@)态度

【问题讨论】:

    标签: database design-patterns anti-patterns staging


    【解决方案1】:

    为什么它们会成为反模式?暂存表对于将接收服务与处理服务分离非常有用。当两个这样的服务被解耦时,由于所有消息都存储在临时表中,因此您对处理错误和网络错误的弹性要大得多。

    【讨论】:

      【解决方案2】:

      我的第一反应是肯定的,但这主要是因为我的情况——你的情况可能不同。我们有一个系统,其中一些相对时间敏感的信息需要从命令组件传输到接收器组件。命令信息被放入数据库表中,然后接收器轮询表以获取更新。这太可怕了。他们这样做是为了在数据库中记录命令,但最终只会使实际命令永远持续下去,并且解耦有时会导致接收器与数据库不同步。

      我宁愿看到 EMS(如 JMS)将消息广播到接收者和数据库插入器都侦听的主题,或者从指挥官到接收者的队列,然后接收者通知状态侦听器将其放入数据库中的状态。

      我等不及要修复该代码了。

      【讨论】:

        【解决方案3】:

        我看到的唯一实时情况是在生成报告时使用非规范化表来保存数据的报告原因。我认为这不是问题。

        【讨论】:

          【解决方案4】:

          正如您所描述的,暂存表是大多数数据仓库或 BI 环境的重要组成部分。您可能会争辩说可靠/弹性 rpc 会做同样的工作,但我认为您是不正确的。

          通过将数据拉到临时表中,您将其移出生产环境,可能会进行进一步的计算、汇总、重新索引、重新键入等,其中大部分都是在数据库中实现的'。用 RPC 替换它,您将代码和 CPU 周期从数据库移到应用服务器中,而没有真正的好处。例如,应用服务器崩溃的可能性要高得多 - 您不能(轻松)回滚 RPC。

          当然,有很多方法可以在系统之间可靠地移动数据,临时表恰好是最简单、性能最高、可靠且在开发方面最便宜的方法之一,但这并不总是意味着它们是正确的方法 - 但更多的时候。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-07
            • 2018-08-30
            • 1970-01-01
            • 1970-01-01
            • 2010-10-02
            相关资源
            最近更新 更多