Tôi có dữ liệu được truyền từ đĩa và được xử lý trong bộ nhớ bằng ứng dụng Java và cuối cùng cần được sao chép vào SQL Server. Dữ liệu có thể khá lớn (do đó phát trực tuyến) và có thể yêu cầu lên đến 100.000 hàng để chèn vào. Giải pháp nhanh nhất có vẻ là sử dụng tính năng sao chép số lượng lớn của SQL Server. Tuy nhiên, tôi đã không tìm thấy bất kỳ cách nào cho các chương trình Java để làm điều này một cách dễ dàng hoặc gần đủ nhanh.Cách hiệu quả nhất để sao chép số lượng lớn vào SQL Server từ Java là gì?
Dưới đây là một số cách mà tôi đã điều tra:
Sử dụng lớp SqlBulkCopy trong .NET. Điều này rất hiệu quả vì bạn có thể truyền dữ liệu ngay từ nguồn dữ liệu và thẳng đến SQL Server. Vấn đề với cách tiếp cận này là bạn cần phải chạy .NET. Có lẽ điều này có thể được sử dụng bằng cách sử dụng một Java để. NET cầu. Mặc dù, tôi tự hỏi về chi phí của dữ liệu marshalling giữa runtimes.
Sử dụng câu lệnh TSUL INSERT TSQL. Vấn đề với điều này là bạn cần tạo một tệp được định dạng đúng trên đĩa. Tôi đã nhìn thấy một số lợi ích hiệu suất nhỏ hơn chèn hàng loạt của JDBC bằng cách sử dụng này. Ngoài ra, điều này chỉ hữu ích tại địa phương.
Ghi tệp vào đĩa và sử dụng tiện ích dòng lệnh bcp. Vẫn còn nhanh hơn một chút so với chèn hàng loạt JDBC nhưng không nhiều. Tôi cũng mất khả năng sử dụng giao dịch với phương thức này.
Sử dụng C API. Một lần nữa, rất hiệu quả, nhưng bạn cần phải sử dụng C. Sẽ có một cách để sử dụng điều này thông qua JNI. Nếu có một số thư viện Java miễn phí ngoài kia thực hiện điều này, tôi muốn biết về nó.
Tôi đang tìm giải pháp nhanh nhất. Bộ nhớ không phải là một vấn đề.
Cảm ơn!
Khi bạn nói rằng Nguồn dữ liệu là Java - bạn có thể xây dựng được không? Dữ liệu có trong bộ nhớ của một ứng dụng/applet Java không? – InSane
Cảm ơn bạn đã trả lời Trong Sane. Tôi đã đặt câu hỏi chi tiết hơn một chút. –