热门标签 | 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游标会更好,在其他情况下,也许是标量结果。除非绝对必要,否则我不会施加限制。

推荐阅读
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
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社区 版权所有