您应该将当前应用程序状态存储在数据库中吗

时间:2014-09-10 18:38:53

标签: database architecture state

我已经开始研究一个项目,其中Postgres数据库被用作系统架构中不可或缺的组件。这迫使我放弃了以前关于数据库很好的概念来存储东西。

有一个API可以将传入的请求转换为数据库查询/更新。这会导致数据库中的触发器通知另一个应用程序相应地更新实际系统。

对我而言,这一切似乎都没有必要。这也是一个相当系统关键的体系结构,但我们无法保证底层系统故障的知识,因为一切都是异步的,因此它会重新启动链。总之,我根本不喜欢它。我的观点是我们应该立即使用API​​与底层系统之间的直接通信从头开始重新启动,仅使用数据库来存储持久状态更新/用户信息等。

我真正想要的是有人向我解释为什么在我最终与团队吵架之前我错了,但欢迎所有观点。

1 个答案:

答案 0 :(得分:3)

支持这种集成的唯一原因是它的成本低,特别是如果两个集成系统使用自己的专有技术相互交流。此外,数据库集成呈现旧的集成风格。

你想要实现(或至少增加)的是“自治”。这是一个太大的话题,但我会根据你的情况尝试突出最重要的事情。

  1. 触发器和存储过程几乎总是邪恶的。它总是导致DB的“逻辑泄漏”,因此导致错误的可移植性和业务逻辑和整个应用程序的可维护性。唯一存储过程可能有用的是提高性能。但是有很多方法可以在没有它们的情况下调整性能。
  2. 一旦您的应用程序通过DB连接,您就会处理它们之间的紧密耦合,因此它们彼此紧密相关,因此两个应用程序的可维护性和可重用性都会受到影响。
  3. 通过以某种复杂的方式通过数据库连接应用程序,您可能还会在将来遇到扩展。
  4. 使用数据库解决方案来调用您正在处理与技术耦合的事情,这不是为了实现这一目的而设计的。因此,由于缺乏灵活性和未来可能的限制,这很糟糕。如果使用一些非标准化的专有工具和协议,则会更糟糕。
  5. 今天(企业)最佳实践是将完全自治的应用程序与应用程序(非集成)非共享数据库一起使用,通过标准化协议进行通信,可能通过一些可靠的中间件。它更昂贵,但它提供了许多好处(可扩展性,可维护性,灵活性等)。

    要确定您是否应该重写某些内容,首先需要估算成本和收益。如果它是一个很好的传统紧密耦合的组合,它工作正常,可能是更好的方式不触摸它,但如果需要创建类似Facade的包装。

    最后,

      

    我真正想要的是有人向我解释我为什么   错

    我认为你错了。