2011-11-08 32 views
22

Đối với ứng dụng Java bên ngoài của thùng chứa J2EE, thư viện kết nối nào là tốt nhất?Kết nối cơ sở dữ liệu Java pool (BoneCP vs DBPool vs c3p0)

  • Tôi nghe nói c3p0 đang lỗi thời.
  • thư viện hồ bơi chung của Jakarta là không còn được phát triển

Vì vậy tôi là trái với BoneCPDBPool. Từ những gì tôi có thể nói cả hai đều có hoạt động giới hạn. Sự khác biệt chính mà tôi có thể thấy là hiệu suất, mà BoneCP dường như giành chiến thắng. Tuy nhiên tài liệu này khá yếu.

Thư viện hồ bơi cơ sở dữ liệu nào bạn đã sử dụng trong thế giới thực và tại sao? Điều gì là tốt và xấu?

+3

Đối với những người tò mò, tôi đã kết thúc với BoneCP. –

+0

Bạn có liên kết nào với tài liệu cấu hình chi tiết về BoneCP không? Hoặc u có thể chia sẻ làm thế nào để sử dụng BoneCP trong JBoss? –

Trả lời

16

Tại nơi làm việc, chúng tôi đã sử dụng BoneCP (như thay thế cho c3p0) và theo như tôi biết chưa có bất kỳ vấn đề nào (tôi không tự nâng cấp). Từ những gì tôi đã thấy và đọc nó có vẻ giống như một thư viện vững chắc được thiết kế tốt, và cá nhân tôi sẽ sử dụng nó trên các lựa chọn thay thế: nó dường như là một trong những thư viện "hoạt động" tốt đẹp để có xung quanh.

Không có gì tiêu cực khi nói về DBPool, tôi không đủ quen thuộc với nó; mặc dù nhìn vào tài liệu trang web của nó chắc chắn có vẻ giống như một cộng.

+0

Phiên bản mới nhất của BoneCP vẫn là 0.7.1, điều này có nghĩa là nó vẫn còn trong giai đoạn "beta" hoặc là nó đủ trưởng thành? –

+1

Hãy nhớ rằng phiên bản rất chủ quan, theo ngữ cảnh. Vì vậy, giá trị chính xác thực sự không quan trọng lắm. Một số tác giả ngần ngại gọi cho thư viện của họ 1.0. JDOM mất nhiều năm để đến đó, ngay cả sau khi ổn định. Vì vậy, tôi đoán là nó ổn định, tốt để sử dụng. – StaxMan

+0

Các tiêu chí chuẩn từ trang BoneCP [link] (http://jolbox.com/index.html?page=http://jolbox.com/benchmarks.html) trông tuyệt vời. – aloplop85

4

Chúng tôi sử dụng C3P0 cả trong và ngoài Tomcat. Tuy nhiên, việc giám sát và ghi nhật ký không phải là lớn nhất, vì vậy chúng ta sẽ bắt đầu sử dụng pool kết nối SpringSource. Một trong những tính năng tốt nhất mà tôi mong đợi là hiển thị chính xác câu lệnh SQL nào đang chạy vào bất kỳ thời điểm cụ thể nào.

Một điều chúng tôi phải thêm vào C3P0 là một phương tiện của thời gian một yêu cầu kết nối đặc biệt chờ đợi bao lâu cho một kết nối khi hồ bơi là đầy đủ và tất cả các kết nối đang bận rộn:

  public Connection getConnection() throws SQLException 
      { 
        long t = System.currentTimeMillis(); 
        ComboPooledDataSource ds = (ComboPooledDataSource) getDelegate(); 
        Connection conn = null; 

        if (ds.getNumBusyConnections() == ds.getMaxPoolSize()) 
        { 
          logger.info("Pool (" + ds.getUser() + ") full, waiting for connection"); 
          conn = ds.getConnection(); 
          t = System.currentTimeMillis() - t; 
          logger.info("Connection busy wait time (" + ds.getUser() + "): " + t + "ms"); 
        } 
        else 
        { 
          conn = ds.getConnection(); 
        } 

        return conn; 
      } 

Vì vậy, những điều bạn phải xem xét:

  1. hỗ trợ và hoạt động (như bạn đã lưu ý)
  2. tốc độ
  3. kiểm soát giám sát, khai thác gỗ và sản xuất

BoneCP có vẻ nhanh (trước đây tôi chưa từng nghe về nó) nhưng thực ra C3P0 cũng nhanh hơn chúng tôi. Quay trở lại khi chúng tôi thử nghiệm một vài 4 hoặc 5 năm trước, DBCP đã chậm chạp một cách khủng khiếp (có vẻ như đã sửa), hồ bơi của Oracle khá chậm và C3P0 rất nhanh. Bài kiểm tra của chúng tôi trông rất giống với bài kiểm tra trên trang web của BoneCP.

Tôi không biết gì về khả năng quản lý của BoneCP. # 3 đã trở thành chức năng quan trọng nhất trong môi trường sản xuất của chúng tôi.

+0

Về việc ghi lại các câu lệnh sql cụ thể, bạn có thể không bật nhật ký gỡ lỗi cho gói java.sql không? – r0ast3d

+0

SpringSource pool cho phép kiểm tra thời gian thực thông qua JMX là sự hiểu biết của tôi. –

+0

Bạn cũng có thể bật ghi nhật ký SQL với BoneCP: http://jolbox.com/bonecp/downloads/site/apidocs/index.html?com/jolbox/bonecp/BoneCPConfig.html, theo phương thức "setLogStatementsEnabled". –

1

Khi chúng tôi thực hiện lựa chọn của mình một vài năm trước, nó chỉ ở giữa c3p0 và dbcp. Tại thời điểm đó c3p0 là một trong những có thể xây dựng lại các kết nối của nó sau khi khởi động lại oracle. Với DBCP, chúng tôi phải khởi động lại máy chủ ứng dụng để máy chủ chạy lại.

Ngoài ra tôi thấy các kết nối gỡ lỗi c3p0 có tính năng cực kỳ hữu ích để theo dõi rò rỉ kết nối có thể rất khó tìm.

Điều tôi đã bỏ lỡ từ c3p0 là ghi nhật ký hữu ích cho các câu lệnh đã thực hiện với thông tin về thời gian thực hiện.

0

Tôi hiện đang thử nghiệm BoneCP trong môi trường mạng nội bộ doanh nghiệp lớn. Tôi đã có vấn đề nhất quán luồng với c3p0 (khá phổ biến nếu bạn đào xung quanh), vì vậy tôi đã làm nghiên cứu của tôi và nó có vẻ như thư viện chứng khoán tốt nhất. Cấu hình là một chút của một bài tập, nhưng một khi bạn nhận được nó xuống, nó có vẻ tuyệt vời.

0

Tôi đã sử dụng c3p0 cùng với DataNucleus/JPA và dễ dàng chuyển sang BoneCP. Thực tế tất cả những gì tôi phải làm là thay đổi cấu hình DataSource trong tệp ngữ cảnh Spring.

Theo như tôi thấy các tiêu chuẩn BoneCP là thực sự tốt: http://www.databaseskill.com/2282333/, http://jolbox.com/benchmarks.html

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