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

JDBC:Tôi có thể chia sẻ kết nối trong một ứng dụng đa luồng và tận hưởng các giao dịch tốt đẹp không?

Có, nói chung bạn cần tạo một kết nối mới cho mỗi luồng. Bạn không có quyền kiểm soát cách hệ điều hành lập thời gian thực thi các luồng (mặc dù xác định các phần quan trọng của riêng bạn), vì vậy bạn có thể vô tình có nhiều luồng đang cố gắng gửi dữ liệu xuống một đường ống đó.

Lưu ý rằng điều tương tự cũng áp dụng cho bất kỳ thông tin liên lạc mạng nào. Ví dụ:nếu bạn có hai luồng đang cố gắng chia sẻ một ổ cắm với kết nối HTTP.

  • Chuỗi 1 đưa ra yêu cầu
  • Luồng 2 đưa ra yêu cầu
  • Luồng 1 đọc byte từ socket, vô tình đọc phản hồi từ yêu cầu của luồng 2

Nếu bạn đã gói tất cả các giao dịch của mình trong các phần quan trọng và do đó khóa bất kỳ chuỗi nào khác trong toàn bộ chu kỳ bắt đầu / cam kết, thì bạn có thể chia sẻ kết nối cơ sở dữ liệu giữa các chuỗi. Nhưng tôi sẽ không làm điều đó ngay cả khi đó, trừ khi bạn thực sự có kiến ​​thức bẩm sinh về giao thức JDBC.

Nếu hầu hết các luồng của bạn không thường xuyên cần kết nối cơ sở dữ liệu (hoặc không cần gì cả), bạn có thể chỉ định một luồng để thực hiện công việc cơ sở dữ liệu của bạn và để các luồng khác xếp hàng các yêu cầu của chúng vào một luồng đó. Điều đó sẽ làm giảm chi phí của rất nhiều kết nối. Nhưng bạn sẽ phải tìm ra cách quản lý các kết nối cho mỗi luồng trong môi trường của mình (hoặc hỏi một câu hỏi cụ thể khác về điều đó trên StackOverflow).

cập nhật: Để trả lời câu hỏi của bạn trong nhận xét, hầu hết các thương hiệu cơ sở dữ liệu không hỗ trợ nhiều giao dịch đồng thời trên một kết nối duy nhất (InterBase / Firebird là ngoại lệ duy nhất mà tôi biết).

Sẽ rất tuyệt nếu có một đối tượng giao dịch riêng biệt và có thể bắt đầu và thực hiện nhiều giao dịch trên mỗi kết nối. Nhưng các nhà cung cấp chỉ đơn giản là không hỗ trợ nó.

Tương tự như vậy, các API tiêu chuẩn không phụ thuộc vào nhà cung cấp như JDBC và ODBC đưa ra cùng một giả định rằng trạng thái giao dịch chỉ đơn thuần là một thuộc tính của đối tượng kết nối.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL - thực hiện hai giao dịch chạy cùng một lúc

  2. Postgres và chỉ mục trên các khóa ngoại và khóa chính

  3. Cách statement_timestamp () hoạt động trong PostgreSQL

  4. Rails, PostgreSQL và History Trigger

  5. Tôi có nên xóa trường id mặc định khi sử dụng khóa chính chuỗi trong Rails / Postgres không?