2014-09-10 63 views
1

我已经开始研究一个项目,其中Postgres数据库被用作系统架构中的一个组成部分。这迫使我放弃以前的观点,即数据库很好,存储事物。是否应将当前应用程序状态存储在数据库中?

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

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

我真的在这里寻找的是有人解释对我来说,为什么我错了,然后我最终与团队脱口而出,但所有的观点都是值得欢迎的。

+0

有点难以知道为什么它的架构就像没有了解相关需求。必须有一些理由 - 即使被误导 - 为什么它会这样做。 – 2014-09-11 08:48:30

回答

3

的唯一理由支持这样的整合是其成本低,特别是如果两个集成系统利用自身的技术proprietry坏comminucating彼此。另外,DB集成呈现旧式集成。

要acheive(或者至少增加)所谓的“自主性”。谈论这个话题太大了,但我会根据你的情况试着突出最重要的东西。

  1. 触发器和存储过程几乎总是邪恶的。它总是会导致DB的“逻辑泄漏”,从而导致业务逻辑和整个应用程序的可移植性和可维护性差。存储过程唯一可能是有用的是提高性能。但是没有它们,有很多方法可以调整绩效。
  2. 只要你的应用程序通过DB连接你正在处理他们之间的紧耦合,因此它们紧紧地依赖于这两个应用程序的对方,因此可维护性和可重用性受到影响。
  3. 通过以某种复杂方式通过数据库连接应用程序,您可能还会在未来遇到扩展问题。
  4. 使用DB解决方案来调用您正在处理的与技术耦合的事情,而这种解决方案并非设计用于实现这一点。因此缺乏灵活性和未来可能的局限性。如果使用一些非标准化的专有工具和协议,它会更糟糕。

今天(企业)的最佳做法是使用与应用(未集成)非共享的数据库完全独立的应用程序,通过标准的协议进行通信,可能是通过一些可靠的中间件。它比较昂贵,但它提供了很多好处(可伸缩性,可维护性,灵活性等)。

要决定你是否应该重写某些东西,首先你需要估计成本和收益。如果它是一个很好的传统紧密耦合的组合,它可以很好地工作,可能不是最好的方式来触摸它,但如果需要的话,创建类似Facade的包装。

最后,

我真正想找这里是有人向我解释为什么我 错

我不认为你错了。