热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

优化Oracle数据库应用集成的高效策略与实践

基本上这里的目标是所谓的松散耦合https:en.wikipedi

你好,
有两个应用程序,我将其称为应用程序A和应用程序P。这两个应用程序都是第三方产品,修改应用程序的能力有限。但是,可以对数据库进行更改,例如添加过程和函数,创建表等。数据库是Oracle 11。
应用程序a需要在应用程序P中查询一些数据。我想做的是:
1.在应用程序P中,创建一个新的模式让我们称之为external_api。
2.在external_api中,创建一个函数 (让我们称之为get_data),该函数将具有来自应用程序a的数据的一个或多个参数,返回值将是来自应用程序P的数据的嵌套表集合 (嵌套表类型将在external_api中定义)。get_data函数将使用传入的参数 (来自应用程序A) 来检索数据,并构建嵌套表集合以返回。get_data将在同一数据库中查询其他模式中的表,以获取要填充集合的数据。(如果传入的数据无效,则会引发异常,可能是no_data_found,尽管我可能会在external_api中定义新的异常类型。)
3.在应用程序P中,创建一个新用户让我们称之为external_api_user。
4.将get_data函数上的execution授予external_api_user
5.创建从应用程序a到使用external_api_user连接的应用程序P的数据库链接
6.在应用程序A中,编写一个调用应用程序P中的get_data函数的过程。
通过这种方法,应用程序P将显示为应用程序A的 “黑匣子”。换句话说,应用程序A不必关注应用程序P的内部细节,例如表结构,列名等。如果供应商更改了应用程序P中的表和列,则所需要做的就是更改get_data函数中的查询,该查询检索数据,并且对应用程序A没有影响。
考虑到我实际上只能在数据库级别进行集成的限制,这是最好的方法吗?还是有另一种更好的方法?更一般地说,在数据库级别的应用程序之间集成的最佳实践是什么?
提前谢谢。

专家解答


基本上这里的目标是所谓的松散耦合
https://en.wikipedia.org/wiki/Loose_coupling
您希望在应用程序 (以及这些应用程序中的组件) 之间建立合理的隔离级别。
我看不到您的建议有任何问题,只是补充说,在需要之前,我不会 “过度设计” 事情。所以
a) 独立的架构,基于API的方法-对我来说看起来不错。API提供了封装,单独的架构提供了良好的 “最不需要的特权” 容量
b) 数据库链接...我不会打扰的。如果在同一数据库中,则只需适当使用同义词/授权,同时仍保留上述 (a)。如果其中一个应用程序 * 确实 * 移至新数据库,则 * 然后 * 查看使用数据库链接。
c) 嵌套表。不要仅仅局限于这一点-在某些情况下,也许ref游标会更好,在其他情况下,也许是标量结果。除非绝对必要,否则我不会施加限制。

推荐阅读
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文介绍了 PHP 的基本概念、服务器与客户端的工作原理,以及 PHP 如何与数据库交互。同时,还涵盖了常见的数据库操作和安全性问题。 ... [详细]
  • 在运行于MS SQL Server 2005的.NET 2.0 Web应用中,我偶尔会遇到令人头疼的SQL死锁问题。过去,我们主要通过调整查询来解决这些问题,但这既耗时又不可靠。我希望能找到一种确定性的查询模式,确保从设计上彻底避免SQL死锁。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • Java 中的十进制样式 getZeroDigit()方法,示例 ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • 图数据库与传统数仓实现联邦查询使用CYPHER实现从关系数据库过滤时间序列指标一、MySQL得到研报实体在Oracle中的唯一ID二、Oracle中过滤时间序列数据三、CYPHER ... [详细]
author-avatar
龙之图皮具
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有