Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hiệu suất Hibernate, JDBC và Java trên tập kết quả vừa và lớn

Bạn có thể thực hiện thử nghiệm khói với truy vấn đơn giản có thể như:

SELECT current_timestamp()

hoặc

SELECT 1 + 1

Điều này sẽ cho bạn biết chi phí trình điều khiển JDBC thực tế là gì. Ngoài ra, không rõ liệu cả hai bài kiểm tra có được thực hiện từ cùng một máy hay không.

Chạy cùng một truy vấn hàng nghìn lần trong Java. JVM cần một thời gian để khởi động (tải lớp, JIT). Ngoài ra, tôi giả sử SimpleJDBC.getConnection() sử dụng gộp kết nối C3P0 - chi phí thiết lập kết nối khá cao nên một vài lần thực thi đầu tiên có thể bị chậm.

Cũng thích các truy vấn được đặt tên hơn truy vấn đặc biệt hoặc truy vấn tiêu chí.

Hibernate là một khuôn khổ rất phức tạp. Như bạn có thể thấy, nó tiêu tốn 75% thời gian thực thi tổng thể so với JDBC thô. Nếu bạn cần ORM thô (không tải chậm, kiểm tra bẩn, bộ nhớ đệm nâng cao), hãy xem xét mybatis . Hoặc thậm chí có thể JdbcTemplate với RowMapper trừu tượng.

Không hẳn vậy. Xem Chương 19. Cải thiện hiệu suất trong tài liệu Hibernate. Có rất nhiều của phản ánh xảy ra ngoài kia + thế hệ giai cấp. Một lần nữa, Hibernate có thể không phải là giải pháp tốt nhất khi bạn muốn sử dụng từng mili giây từ cơ sở dữ liệu của mình.

Tuy nhiên nó là một lựa chọn tốt khi bạn muốn tăng trải nghiệm người dùng tổng thể do hỗ trợ bộ nhớ đệm rộng rãi. Kiểm tra hiệu suất doc lại. Nó chủ yếu nói về bộ nhớ đệm. Có một bộ nhớ cache cấp một, bộ nhớ cache cấp hai, bộ nhớ cache truy vấn ... Đây là nơi mà Hibernate có thể thực sự hoạt động tốt hơn JDBC đơn giản - nó có thể cache rất nhiều theo cách mà bạn thậm chí không thể tưởng tượng được. Mặt khác - cấu hình bộ nhớ cache kém sẽ dẫn đến thiết lập thậm chí còn chậm hơn.

Kiểm tra: Lưu vào bộ nhớ đệm với Hibernate + Spring - một số câu hỏi!

JVM (đặc biệt trong máy chủ cấu hình) là khá nhanh. Việc tạo đối tượng trên heap nhanh như trên stack trong ví dụ:C, việc thu gom rác đã được tối ưu hóa rất nhiều. Tôi không nghĩ rằng phiên bản Java chạy JDBC thuần túy sẽ chậm hơn nhiều so với nhiều kết nối gốc hơn. Đó là lý do tại sao tôi đề xuất một số cải tiến trong điểm chuẩn của bạn.

Tôi tin rằng JDBC là một lựa chọn tốt nếu hiệu suất là vấn đề lớn nhất của bạn. Java đã được sử dụng thành công trong rất nhiều ứng dụng nặng về cơ sở dữ liệu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. So sánh các giá trị của dấu thời gian và chỉ định một giá trị cho từng dấu thời gian trong trường hợp chúng đã thay đổi

  2. Làm cách nào để cập nhật nếu tồn tại, chèn nếu không (AKA nâng cấp hoặc hợp nhất) trong MySQL?

  3. Làm cách nào để tắt bộ nhớ đệm SQLAlchemy?

  4. Cách lưu trữ ngày giờ trong MySQL với thông tin múi giờ

  5. Bất kỳ Thư viện Javascript / Jquery Để xác thực trạng thái SQL?