我使用了一些Oracle工具,它们不需要安装Oracle客户端或即时客户端,不需要修改路径,也不需要设置ODBC数据源或tnsnames.ora文件。
我想知道这是怎么做到的。例如,oracmd(http://www.withdata.com/oracmd.html)连接到Oracle而没有任何其他客户端工具。所以我们知道这是可能的。
基本上我想创建一个R包,它可以读取一个SQL文件,并将ip地址,端口和SID / Service Name作为参数并返回数据。唯一需要的安装是安装R包。我更喜欢免费/开源许可证来分发包裹。
我能够在没有客户端的情况下使用JDBC构建一个R包来实现这一点,但是对于>的数据集,性能非常糟糕。 1000行。我正在寻找比JDBC更好的东西。
答案 0 :(得分:3)
有少数公司对Oracle网络协议进行了逆向工程,因此他们不需要包含任何类型的客户端软件。通常,这些是实现线程协议ODBC驱动程序之类的公司。由于Oracle网络协议没有文档记录,并且可能会在各个版本中发生变化,因此这通常不是一项微不足道的工作 - 您正在谈论几十年甚至几百年的工作量。
绝大多数应用程序(如链接到的应用程序)将在后台使用JDBC,并将包含瘦JDBC驱动程序,或者将作为安装过程的一部分透明地安装Instant Client。 Instant Client的重点是允许应用程序开发人员将其与应用程序捆绑在一起,以便应用程序安装也可以设置Oracle客户端软件。
所有这一切,由于性能问题而需要放弃JDBC以及使用C ++会产生大量性能改进的前提似乎让我怀疑。如果正确完成,JDBC应用程序应该像C ++应用程序一样快速地提取数据。瓶颈确实应该是数据库运行查询的能力以及网络传输数据的能力。编写天真的JDBC代码肯定有可能产生非常差的性能,但这更像是一个应用程序编程问题,而不是API问题。