我们开发了一个在大型机(z / OS)上运行的应用程序,它使用CAF(调用附着工具)与DB2 / z进行通信以存储其数据。
已经拥有DB2 / z的客户(因此无论如何都必须为此付费)并不关心,但还有其他人想要使用我们的应用程序而不用也导致了数据库的费用。
由于费用昂贵,他们表示希望我们的产品不使用DB2 / z。在z / OS下,DB2的许可证费用相当高,我们的应用程序并不真正需要它提供的疯狂级别的可靠性。
所以他们希望我们做的是在完全独立于大型机的机器上的zLinux(SLES / RHEL)或DB2 / LUW下运行DB2。或者甚至,尽管在非IBM数据库中这可能会更难。
我们正在为我们的代码寻找一个希望极少变化的解决方案来实现这一目标。 DB2拥有所有联合的东西,这将允许使用DB2 / z的程序无缝访问在其他地方运行的实例上的数据,但这仍然需要DB2 / z,因此不会导致成本降低。
将所有数据从大型机中移出并允许我们从应用程序中完全删除DB2 / z依赖项的最简单方法是什么?
答案 0 :(得分:1)
这不是一个答案,只是一些想法和观察。
我能想到的一种方法是将您的应用程序分层到I / O层和 应用层。应用程序将在Z / OS上运行,I / O层将继续运行 任何机器托管数据库。然后,所有数据访问都将通过远程过程调用 通过TCP / IP或UDP。这将是很多工作来设置和配置。更糟糕的是它可能只是 适用于只读类型操作,因为管理事务ACID(原子性,一致性,隔离性,持久性) 在更新操作面前,属性变成了真正的噩梦。
正如cschneid所指出的那样,你可以尝试“自己动手”#34;数据库管理系统使用 开源;但这也可能导致更多问题而不是解决。
我认为你的观察是关于"推动一块大石头上山"总结一下。
答案 1 :(得分:1)
在@ NealB的答案的基础上,创建图层的另一种方法是在应用程序层中没有SQL,而是调用子例程来完成I / O.您表示您愿意创建自定义构建,因此您可以为常见问题的持久层创建一组例程。
调用“数据库连接”模块,对于z / OS上的DB2将执行CAF调用,因为z / Linux上的DB2会(例如)建立与DBMS的SSL连接。使用指向必要数据结构的指针联合在内存中维护一个结构,以便与您选择的DBMS进行通信。
FWIW我见过这样做的供应商代码,允许业务逻辑独立于DBMS实现。一些商店使用VSAM,其他商店使用DB2,其他IMS。数据模型很混乱,但有时候它们就是休息。