如何从Oracle PL / SQL访问Subversion?
对于一个政府机构,我们构建了一个用PHP和Oracle开发的发布管理系统。该应用程序的数据存储在数据库表中,并通过PL / SQL包和过程进行处理。
发布管理过程主要基于Subversion存储库中的元数据。我们通过内部Oracle JVM从PL / SQL访问存储库,以在驻留Oracle实例的UNIX服务器上执行svn命令。 svn命令的结果以XML格式接收并进行解析,然后再由PL / SQL处理。对于频繁重复使用这种方式访问Subversion的性能不是很高。
当前,我们要做的是在Subversion存储库中的每个提交处(通过Subversion挂钩)将Subversion元数据存储在数据库表中。我们提取每个Subversion事务的日志信息,并将其保存在一些oracle表中。然后,我们可以使用常规SQL查询获取Subversion元数据。
是否有更好的方法从PL / SQL访问Subversion?
解决方案
如果我们使用的是Oracle的Java JVM,则可以尝试使用SVNKit从Java与SVN服务器进行自然通信,而不是使用操作系统来执行命令。
我认为基本流程很有意义。我建议进行实验以查看性能瓶颈的确切位置,然后从那里获取。例如,它是否从PL / SQL过渡到Oracle JVM?是JVM炮轰执行svn命令吗?是svn往返吗?它是XML的解析吗?
举例来说,这是svn往返。也许我们可以在oracle机器上有一个进程来缓存svn服务器的答案,以便有时可以避免往返?也许svn往返可能是异步的?
但是,就像我说的那样,我们需要知道瓶颈在哪里。
我还在寻找API来对Subversion和Oracle进行整数化。我需要能够将Oracle PL / SQL对象(过程,程序包)拉入Subversion,然后一旦对对象进行更改,就应将其应用于Oracle数据库中的那些对象。