Поддерживает ли sybase 15 API BCP в Java? - PullRequest
6 голосов
/ 05 октября 2010

Давным-давно я понял, что bcp - это всего лишь небольшая C-программа, которая вызывает специальный бит API клиента Sybase для перемещения больших объемов данных в базу данных.Он обманывает, крадет и пропускает проверку ограничений во имя скорости.Отлично, я за это.В sybase 12 я заметил, что api был выставлен в клиентской библиотеке C, но не в java.

Я искал, но я не нашел ничего, что говорит, что они еще реализовали его вклиентская библиотека sybase 15 javaКто-нибудь знает, доступно ли это в Sybase 15?

Ответы [ 4 ]

3 голосов
/ 24 марта 2011

Я не согласен с вашими комментариями по Java с использованием API BCP.Хотя я согласен с ограничениями Java и ODBC / JDBC, это не означает, что использование Java BCP API не дает никаких преимуществ.У нас есть система с большим количеством Java, которая не практична или не очень эффективна для оболочки из Java и запуска утилиты командной строки BCP.

Запуск утилиты командной строки не дает очень хороших отчетов об ошибках и взаимоблокировкиповторы.Это также требует записи данных в файл, что увеличивает количество операций и замедляет весь процесс.Иногда мы даже не можем записать файл в виде сетки, в которой нет файловой системы, а tmp слишком мал.

Что касается скорости, то JBCP медленнее, чем нативный API, однако этоприемлемо и, конечно, быстрее, чем вызов повторных команд вставки.

Мвиллетт (автор JBCP)

1 голос
/ 30 апреля 2011

Если вы не против, чтобы ваша Java-программа перестала быть переносимой, вы можете связать ее с любой библиотекой C через JNI. Это предпочтительнее, чем переписывать ваше приложение или вызывать отдельную задачу для BCP данных

Полагаю, вы не хотите переписывать все приложение на C ++; -)

1 голос
/ 23 октября 2010

Ответ НЕТ.

Но с какой стати вы хотите перенести массу данных с Java на сервер?(1) Java не предназначена для этого, поэтому она будет очень медленной (2) нативная bcp или C + bcp или perl + bcp, или любая команда оболочки + bcp прокручивает вокруг нее круги и в любом случае смещает их.Это все равно, что запускать bcp через ODBC или JDBC.

Нам нужно отойти от Молота Маслоу и использовать правильный инструмент для задания.


Более подробно, отвечая на комментарии:

  1. Обычная ПРОГРАММА, которая подключается к серверу ASE (стиль клиент-сервер), использует предоставленную Open Client Library;это является родным и эффективно перемещает пакеты TDS.Соединение - универсально доступный однодюймовый садовый шланг.ПРОГРАММЫ, написанные на C, C ++, COBOL, Perl и PowerBuilder, используют этот транспорт.

  2. ODBC (и, следовательно, JDBC, поскольку он построен поверх ODBC), - это простой способ подключения ксервер, использующий шланг миллиметра.Хотя этого вполне достаточно для таких задач, как использование Excel для рисования диаграмм непосредственно из таблиц ASE, где скорость передачи данных не имеет значения;он совершенно не подходит для перемещения данных любого существенного объема, для обычного доступа приложений к серверу данных (кроме случаев, когда «программист» не знает, что доступно [1]).
    .
    Java не поддерживаетиметь [1] и ограничен этим [2] транспортом.

  3. bcp - это служебная программа (существует сама по себе), поставляемая поставщиком, которая гораздо плотнее подключается к серверу.Это не «особый бит клиентского API».Здесь нет «лжи и обмана», все ограничения налагаются администратором базы данных, выполняющим задачу.Соединение представляет собой двухдюймовый пожарный шланг, который обычно не доступен для общественности.Он предназначен для быстрого перемещения больших объемов данных.Если он используется на том же хосте, что и сервер, так как шланг не ретикулизирован через сеть, он перемещает данные еще быстрее.

  4. Намного позже поставщик сделал функцию bcp доступной какБиблиотека (API в ваших терминах), которая может быть вызвана из любого разумно спроектированного компилятора.C, C ++, COBOL и Perl являются таковыми и создают ПРОГРАММЫ, и, следовательно, предоставляют доступ к этой библиотеке прямо из вашего кода.Соединение такое же, как у пожарного шланга длиной два с половиной дюйма, но благодаря дополнительным слоям он работает с максимальной скоростью двухдюймового пожарного рукава.

(Примечаниедля читателей, которые ожидают, что это будет полный список: есть два других варианта, которые я здесь не детализировал, потому что они сервер-сервер и не имеют отношения к этой теме).

Поскольку программы Java являютсяв настоящее время ограничено одним миллиметровым соединением с сервером ASE, бесполезно предоставлять API bcp для Java (у вас будет только два с половиной дюйма пожарного рукава, сетчатого через сеть, с потоком в один миллиметр),это нелепое предприятие.Существует причина, по которой, несмотря на то, что миллионы многих организаций влились в Java, в течение довольно долгого времени развития ни одна из них не потратила денег на создание пожарной части, которая перемещает капли и капли.

Вы не можете получить скоростьборзой из таксы, нет смысла давать ей тренировку беговой дорожки.Вы можете перестать шептать обещания на его ухо.

Во-вторых, Java не может эффективно обрабатывать большие (исходные) наборы данных, она не была предназначена для этого.Поэтому , даже если устранение удушения JDBC (например, была реализована собственная Открытая клиентская библиотека), он все равно не может перемещать данные так быстро, как C, C ++, COBOL, Perl, PB;это будет перемещать данные в струйку (четверть дюйма?) в один дюйм шланг.Поэтому даже тогда было бы абсурдно предоставлять возможность bcp библиотеке Java;это было бы целесообразно, если бы и когда Java (которая была разработана с учетом других приоритетов) имела большие возможности передачи данных.

Это может помочь выйти из вашего Java, Java и только мышления Java и использовать правильный инструмент (ПРОГРАММА) для работы. Если вы «программист» на Java, то, по крайней мере, вам необходимо ознакомиться с возможностями и ограничениями вашего языка программирования и доступных библиотек. Оригинальный вопрос демонстрирует полное незнание этого, поэтому я должен был представить его в своем исправленном посте.

Программисты, которые не ограничиваются Java, думают о том, где находится большой источник данных; минимизировать передачу данных по сетям; подумайте о том, какие ПРОГРАММЫ уже написаны и что можно использовать (в отличие от написания своих программ в отрыве от остальной планеты); и используй их.

Наконец, для понимания, даже если вы получили возможность bcp в какой-то Библиотеке и внедрили ее, когда вы помещаете «программу» в реальный мир, любой разумный администратор баз данных отклонит ее из-за своей скорости передачи данных, и используйте вместо этого bcp с пожарным шлангом.

1 голос
/ 05 октября 2010

Я думаю, что нет, может быть, это больше проблема с установкой этой операции в спецификации JDBC.

Я вижу проект JBCP в SourceForge, но не имею никакого опыта с ним.

...