sybase 15是否支持java中的bcp api?

时间:2010-10-04 21:02:47

标签: sybase bcp sybase-bcp

很久以前我发现bcp只是一个小C程序,它调用sybase客户端api的特殊位来将大量数据移入数据库。这是欺骗和偷窃,并以速度的名义检查约束。 太好了,我全力以赴。 在sybase 12中,我注意到api暴露在C客户端库中,但不是Java客户端库。

我一直在寻找,但我没有找到任何说他们已经在sybase 15 java客户端库中实现它的东西。 有没有人知道sybase 15中是否可以使用它?

4 个答案:

答案 0 :(得分:3)

我不同意您使用BCP api对Java的评论。虽然我同意Java和ODBC / JDBC的局限性并不意味着使用Java BCP api没有优势。我们有一个包含大量Java的系统,它不实用或非常有效,可以从Java中运行并运行BCP命令行实用程序。

运行命令行实用程序不会提供非常好的错误报告和死锁重试。 它还需要将数据写入文件,这将增加操作次数并减慢整个过程。有时我们甚至不能将文件写在没有文件系统且tmp太小的网格上。

至于速度,JBCP比本机api慢,但它可以接受并且肯定比调用重复的插入命令更快。

Mwillett(JBCP的作者)

答案 1 :(得分:1)

我不这么认为,将该操作纳入JDBC规范可能更具问题。

我确实在SourceForge上看到了一个JBCP项目,但是对它没有任何经验。

答案 2 :(得分:1)

答案是否定的。

但是为什么在地球上你想要将大量数据从Java移动到服务器? (1)Java不是为此而设计的,因此它将非常慢(2)本机bcp或C + bcp或perl + bcp或任何shell命令+ bcp会尖叫它周围的圆圈,并无论如何取代它。这就像想通过ODBC或JDBC运行bcp。

我们需要离开马斯洛的锤子并使用正确的工具来完成工作。


进一步详细说明,回应评论:

  1. 连接到ASE服务器的常规PROGRAM(客户端 - 服务器样式)使用提供的Open Client Library;这是本机的,可以有效地移动TDS数据包。该连接是普遍可用的1英寸花园软管。用C,C ++,COBOL,Perl和PowerBuilder编写的程序使用此传输。

  2. ODBC(因而它是基于ODBC构建的JDBC)是使用一毫米软管连接到服务器的简单方法。虽然这对于诸如使用Excel直接从ASE表绘制图表这样的任务来说已经足够了,但是数据传输速度并不相关;对于正常的应用程序访问数据服务器来说,移动任何实际数据的数据都是不够的(除非“程序员”不知道[1]可用的事实)。

    Java没有[1]并且仅限于[2]传输。

  3. bcp是供应商提供的实用程序PROGRAM(独立存在),它更紧密地连接到服务器。它不是“客户端API的特殊位”。没有涉及“撒谎和欺骗”,所有约束都由执行任务的DBA指导。这种连接是一个两英寸半的消防水带,一般不向公众开放。它旨在快速移动大量数据。如果在与服务器相同的主机上使用,由于软管没有通过网络进行网状化,因此可以更快地移动数据。

  4. 很久以后,供应商将bcp功能作为库(您的术语中的API)提供,因此可以从任何合理架构的编译器调用它。 C,C ++,COBOL和Perl都是这样,并生成PROGRAMS,因此可以直接从您的代码提供对该库的访问。连接是相同的2.5英寸消防水带,但由于附加层,它以最大速度运行两英寸消防水带。

  5. (请注意那些希望这是完整列表的读者:还有其他两个选项,我在这里没有详细介绍,因为它们是服务器 - 服务器,与此线程无关)。 < / p>

    由于Java PROGRAMS目前仅限于与ASE服务器的1毫米连接,因此将bcp API提供给Java是没有用的(你将只有一个2.5英寸的消防水带网络通过网络,一毫米的流量),这是一个荒谬的企业。有一个原因,尽管有数百万组织涌入Java,但在其相当长的时期内,他们都没有花钱来提供一个可以减少滴水的消防站。

    你无法从达克斯猎犬那里获得灵缇的速度,没有必要给它进行赛道训练。你可以停止在耳边低语。

    其次,Java无法有效处理大型(源)数据集,它不是为此而设计的。因此,即使解除了JDBC扼杀(例如,实现了本机Open Client库),它仍然无法像C,C ++,COBOL,Perl,PB那样快速地移动数据;它会在一英寸软管中以涓流(四分之一英寸?)移动数据。因此,即使这样,向Java库提供bcp功能也是荒谬的。如果Java(考虑到其他优先级的设计)被赋予大数据传输能力,那将是值得的。

    移出 Java,Java,除了Java 思维模式,并使用正确的工具(PROGRAM)作为作业可能会有所帮助。如果您是Java“程序员”,那么至少您需要熟悉编程语言和可用库的功能和限制。最初的问题表明完全无知,因此我不得不在我的修订后的帖子中提供它。

    不限于Java的程序员,考虑大数据源的位置;最小化网络间的数据传输;想一想已经编写过的程序和可以使用的程序(而不是与地球其他部分分开编写自己的程序);并使用它们。

    最后,为了理解,即使你确实在某个库中获得了bcp功能并实现了它,当你将“程序”放在现实世界中时,任何合理的DBA都会因为它的涓流速度数据传输而忽略它,而是使用bcp和它的消防水管。

答案 3 :(得分:1)

如果您不介意Java程序不再可移植,可以通过JNI链接到任何C库。这比必须重写您的应用程序或调用单独的任务BCP数据

更可取

我认为你不想用C ++重写整个应用程序; - )