2010-10-04 34 views
6

Một thời gian dài trước đây tôi đã tìm ra rằng bcp chỉ là một chương trình C nhỏ gọi các bit đặc biệt của api khách hàng sybase để làm dữ liệu khối lượng di chuyển vào cơ sở dữ liệu. Nó nằm cheats và đánh cắp và bỏ qua kiểm tra ràng buộc tất cả trong tên của tốc độ. Tuyệt vời, tôi tất cả vì điều đó. Trong Sybase 12 Tôi nhận thấy rằng api đã được tiếp xúc trong thư viện khách hàng C, nhưng không phải là java.Sybase 15 có hỗ trợ api bcp trong java không?

Tôi đã tìm kiếm nhưng tôi chưa tìm thấy bất kỳ điều gì cho biết họ chưa triển khai nó trong thư viện khách hàng java cơ sở 15. Có ai biết nếu điều này có sẵn hay không trong Sybase 15?

Trả lời

3

Tôi không đồng ý với nhận xét của bạn về Java bằng cách sử dụng api BCP. Trong khi tôi đồng ý về các hạn chế của Java và ODBC/JDBC không có nghĩa là không có lợi thế khi sử dụng api BCP Java. Chúng tôi có một hệ thống với rất nhiều Java và nó không thực tế hoặc rất hiệu quả để loại bỏ khỏi Java và chạy tiện ích dòng lệnh BCP.

Chạy tiện ích dòng lệnh không cung cấp báo cáo lỗi rất tốt và thử lại bế tắc. Nó cũng đòi hỏi phải ghi dữ liệu vào một tệp sẽ tăng số lượng hoạt động và làm chậm toàn bộ quá trình. Đôi khi chúng tôi thậm chí không thể viết một tập tin như trên một mạng lưới mà không có một hệ thống tập tin và tmp là quá nhỏ.

Đối với tốc độ, JBCP cũng chậm hơn so với api gốc, tuy nhiên nó được chấp nhận và chắc chắn nhanh hơn gọi các lệnh chèn lặp lại.

Mwillett (tác giả của JBCP)

+1

Tôi không phải là một người rõ ràng nhưng trong linh hồn tôi biết rằng mọi lập trình viên đều biết như bạn đã đề cập rằng bạn chỉ cần không Shell để các chương trình dòng lệnh để hoàn thành công việc. Bạn chỉ cần không. Cảm ơn bạn đã từ ngữ nó rất đẹp. – stu

1

Tôi nghĩ không, nó có thể là một vấn đề hơn với việc phù hợp với hoạt động đó vào đặc tả JDBC.

Tôi thấy một dự án JBCP trên SourceForge, nhưng không có bất kỳ trải nghiệm nào với nó.

+0

Tôi nghĩ bạn nói đúng. Thật đáng tiếc rằng một thông số kỹ thuật sẽ cản trở một công ty viết phần mềm hữu ích. – stu

1

Câu trả lời là KHÔNG.

Nhưng tại sao bạn muốn di chuyển khối lượng dữ liệu từ Java sang máy chủ? (1) Java không được thiết kế cho điều đó, vì vậy nó sẽ rất chậm (2) bcp bản địa hoặc C + bcp hoặc perl + bcp hoặc bất kỳ lệnh shell + bcp nào sẽ hét lên xung quanh nó, và thay thế nó. Nó giống như muốn chạy bcp thông qua ODBC hoặc JDBC.

Chúng tôi cần phải di chuyển ra khỏi Hammer của Maslow và sử dụng Công cụ phù hợp cho công việc.


chi tiết hơn nữa, đáp ứng với nhận xét:

  1. một chương trình bình thường để kết nối đến máy chủ ASE (Client-Server style) sử dụng cung cấp thư viện khách hàng mở; đây là bản địa, và di chuyển các gói TDS một cách hiệu quả. Kết nối là một vòi vườn rộng một inch. CÁC CHƯƠNG TRÌNH được viết bằng C, C++, COBOL, Perl và PowerBuilder sử dụng phương tiện này.

  2. ODBC (và do đó JDBC vì nó được xây dựng trên ODBC) là một phương pháp đơn giản để kết nối với máy chủ bằng cách sử dụng một ống một mm. Trong khi điều này là khá thích hợp cho các nhiệm vụ như sử dụng Excel để vẽ biểu đồ trực tiếp từ các bảng ASE, nơi tốc độ truyền dữ liệu không liên quan; nó là không đủ để di chuyển dữ liệu của bất kỳ khối lượng đáng kể, để truy cập ứng dụng bình thường đến một máy chủ dữ liệu (ngoại trừ nơi "lập trình" là không biết gì về thực tế là [1] có sẵn).
    .
    Java không có [1] và được giới hạn cho vận chuyển [2] này.

  3. bcp là một CHƯƠNG TRÌNH tiện ích (tự tồn tại) được cung cấp bởi nhà cung cấp kết nối với máy chủ chặt chẽ hơn nhiều. Nó không phải là một "bit đặc biệt của API ứng dụng khách". Không có "nói dối và gian lận" liên quan, tất cả các ràng buộc được chỉ đạo bởi DBA thực hiện nhiệm vụ. Kết nối là một ống lửa hai inch rưỡi, thường không có sẵn cho công chúng. Nó được thiết kế để di chuyển khối lượng dữ liệu lớn ở tốc độ. Nếu được sử dụng trên cùng một máy chủ với máy chủ, vì ống không được che khuất qua mạng, nó sẽ di chuyển dữ liệu nhanh hơn.

  4. Sau đó, nhà cung cấp đã thực hiện khả năng bcp có sẵn dưới dạng Thư viện (API theo thuật ngữ của bạn), do đó có thể được gọi từ bất kỳ trình biên dịch được cấu trúc hợp lý nào. C, C++, COBOL, và Perl là như vậy, và tạo ra các CHƯƠNG TRÌNH, và do đó cung cấp quyền truy cập vào thư viện này trực tiếp từ mã của bạn. Kết nối là cùng một ống lửa hai inch rưỡi, nhưng do các lớp bổ sung, nó chạy ở tốc độ tối đa của một ống lửa hai inch.

(Lưu ý để độc giả mong đợi điều này là một danh sách đầy đủ: Có hai lựa chọn khác mà tôi đã không trình bày chi tiết ở đây, bởi vì họ là server-máy chủ và không liên quan đến chủ đề này).

Vì các CHƯƠNG TRÌNH Java hiện bị giới hạn trong kết nối một milimet với máy chủ ASE, không sử dụng API bcp cho Java (bạn sẽ chỉ có một ống lửa hai inch rưỡi được lưới qua mạng, với một FLOW của một milimét), nó là một doanh nghiệp vô lý. Có một lý do tại sao, mặc dù hàng triệu tổ chức đã đổ vào Java, trong quá trình phát triển um khá dài, không ai trong số họ đã chi tiền để cung cấp một nhà kho lửa di chuyển nhỏ giọt.

Bạn không thể đạt được tốc độ của chó săn từ chó dachshund, không có sử dụng cho việc đào tạo đường đua. Bạn có thể ngừng lời thì thầm trong tai của nó.

Thứ hai, Java không thể xử lý tập dữ liệu lớn (nguồn) hiệu quả, nó không được thiết kế cho điều đó. Do đó ngay cả khi sự bóp cổ JDBC đã được dỡ bỏ (ví dụ: Thư viện khách hàng mở gốc đã được triển khai), nó vẫn không thể di chuyển dữ liệu nhanh như C, C++, COBOL, Perl, PB; nó sẽ di chuyển dữ liệu ở mức nhỏ giọt (inch inch?) trong ống một inch. Vì vậy, thậm chí sau đó, nó sẽ là vô lý để cung cấp khả năng bcp cho thư viện Java; điều đó sẽ đáng giá nếu và khi Java (được thiết kế với các ưu tiên khác trong tâm trí) được bổ nhiệm với khả năng truyền dữ liệu lớn.

Có thể giúp di chuyển ra khỏi Java, Java và không có gì khác ngoài suy nghĩ Java và Sử dụng Công cụ phù hợp (PROGRAM) cho Công việc. Nếu bạn là một "lập trình viên" Java, thì ít nhất bạn cần phải tự làm quen với khả năng và hạn chế của ngôn ngữ lập trình của bạn và các thư viện có sẵn. Câu hỏi ban đầu chứng minh sự thiếu hiểu biết hoàn toàn về điều đó, do đó tôi phải cung cấp nó trong bài viết đã được sửa lại của tôi.

Các lập trình viên không bị giới hạn Java, hãy nghĩ về nơi có nguồn dữ liệu lớn; giảm thiểu việc truyền dữ liệu qua mạng; suy nghĩ về những chương trình đã được viết và có thể được sử dụng (trái ngược với việc viết riêng của họ trong sự cô lập với phần còn lại của hành tinh); và sử dụng chúng. Cuối cùng, để hiểu, ngay cả khi bạn đã có được khả năng bcp trong một số Thư viện, và thực hiện nó, khi bạn đặt "chương trình" trong thế giới thực, bất kỳ DBA hợp lý nào cũng sẽ loại bỏ nó do vận chuyển dữ liệu tốc độ nhỏ giọt của nó. và sử dụng bcp với vòi chữa cháy thay thế.

+0

http://catless.ncl.ac.uk/Risks/26.20.html#subj2 – stu

+0

Tôi tìm thấy bài viết tuyệt vời này về lý do tại sao bạn không nên chạy trình bao để hoàn thành công việc. – stu

+1

Bạn đang tìm kiếm bằng chứng để hỗ trợ vị trí cố định của mình. Tên ngốc đã triển khai hệ thống báo cáo không hiểu cách thiết lập bảo mật trên hệ thống Unix. MySQL RUby, vv, tất cả phần mềm miễn phí là mở rộng để hack, doanh nghiệp dbs không. Nhưng chúng ta không bị phân tâm, có hàng triệu (có thể là hàng tỷ) shell & perl script chạy thành công trên hành tinh (được bảo mật nhất, nhưng một số cửa hàng chuột mickey không an toàn). – PerformanceDBA

1

Nếu bạn không nhớ chương trình Java của bạn không bị cầm tay nữa, bạn có thể liên kết đến bất kỳ thư viện C qua JNI. Đó là một lợi thế để phải viết lại ứng dụng của bạn, hoặc để gọi một nhiệm vụ riêng biệt để BCP dữ liệu

Tôi giả sử bạn không muốn viết lại toàn bộ ứng dụng của bạn trong C++ ;-)

+0

đó là một điểm rất tốt, tôi không biết tại sao điều đó không xảy ra với tôi 4 năm trước. :-) Nhưng than ôi, vấn đề đó không phải là vấn đề nữa, nhưng đây sẽ là một ý tưởng khả thi rất tốt. – stu

Các vấn đề liên quan