2008-09-02 41 views
60

Có thể lưu các kết nối cơ sở dữ liệu khi sử dụng PHP giống như trong một thùng chứa J2EE không? Nếu vậy, làm thế nào?Kết nối tổng hợp trong PHP

+0

Làm thế nào về điều này? https://github.com/junamai2000/mod_namy_pool – nam

+0

Bạn đã xem kết nối liên tục bằng [mysql_pconnect()] (http://www.php.net/mysql_pconnect) chưa? –

Trả lời

0

Bạn không thể khởi tạo các nhóm kết nối theo cách thủ công.

Nhưng bạn có thể sử dụng kết nối "tích hợp sẵn" với chức năng mysql_pconnect.

8

Tôi cho rằng bạn đang sử dụng mod_php, phải không?

Khi tệp PHP kết thúc thực thi tất cả trạng thái của nó bị giết nên không có cách nào (trong mã PHP) để thực hiện kết nối tổng hợp. Thay vào đó, bạn phải dựa vào tiện ích mở rộng.

Bạn có thể mysql_pconnect để kết nối của bạn sẽ không bị đóng sau khi trang kết thúc, theo cách đó chúng sẽ được sử dụng lại trong yêu cầu tiếp theo.

Đây có thể là tất cả những gì bạn cần nhưng điều này không giống như kết nối tổng hợp vì không có cách nào để chỉ định số lượng kết nối để duy trì mở.

Chúc mừng.

+3

Kết nối có thể được tái sử dụng bởi những người dùng khác nhau không? Nếu vậy, tại sao sổ tay nói rằng chúng ta nên cấu hình MySQL để tránh quá nhiều kết nối? – omg

43

Không có kết nối tổng hợp bằng php.
mysql_pconnectkết nối tổng hợp là hai thứ khác nhau. Có nhiều vấn đề được kết nối với mysql_pconnect và trước tiên bạn nên đọc hướng dẫn và sử dụng cẩn thận, nhưng đây không phải là kết nối tổng hợp.

Kết nối tổng hợp là một kỹ thuật mà máy chủ ứng dụng quản lý các kết nối. Khi ứng dụng cần kết nối, nó sẽ yêu cầu máy chủ ứng dụng cho nó và máy chủ ứng dụng trả về một trong các kết nối được gộp chung nếu có một kết nối miễn phí.

Chúng ta có thể làm kết nối mở rộng quy mô trong php cho rằng xin vui lòng đi qua đường dẫn sau: http://www.oracle.com/technetwork/articles/dsl/white-php-part1-355135.html

Vì vậy, không kết nối pooling trong php.

Như Julio đã nói apache giải phóng tất cả các tài nguyên khi yêu cầu kết thúc cho các yêu cầu hiện tại. Bạn có thể sử dụng mysql_pconnect nhưng bạn bị giới hạn với hàm đó và bạn phải rất cẩn thận. Lựa chọn khác là sử dụng mẫu đơn, nhưng không có thứ nào trong số này được gộp chung.

Đây là một bài viết tốt: http://blogs.oracle.com/opal/2007/01/highly_scalable_connection_poo.html

Cũng đọc một http://www.apache2.es/2.2.2/mod/mod_dbd.html

+7

Không có kết nối tổng hợp? Wow. – Justin

+0

"Kết nối với máy chủ SQL sẽ không bị đóng khi thực thi tập lệnh kết thúc". - http://www.php.net/manual/en/function.mysql-pconnect.php – RandomSeed

+2

Liên kết hoạt động cho blog oracle: https://blogs.oracle.com/opal/entry/highly_scalable_connection_poo –

10

kết nối liên tục không có gì giống như kết nối tổng hợp. Một kết nối liên tục trong php sẽ chỉ được tái sử dụng nếu bạn thực hiện nhiều db kết nối trong cùng một bối cảnh thực thi lệnh/script. Trong hầu hết các kịch bản web dev điển hình, bạn sẽ tối đa hóa kết nối nhanh hơn nếu bạn sử dụng mysql_pconnect vì tập lệnh của bạn sẽ không có cách nào để tham chiếu đến bất kỳ kết nối mở nào theo yêu cầu tiếp theo của bạn. Cách tốt nhất để sử dụng các kết nối db trong php là tạo một cá thể đơn lẻ của một đối tượng db để kết nối được tái sử dụng trong bối cảnh thực thi tập lệnh của bạn. Điều này vẫn phải chịu ít nhất 1 db kết nối cho mỗi yêu cầu, nhưng nó tốt hơn làm cho nhiều db kết nối mỗi reqeust.

Không có kết nối db thực sự tổng hợp trong php do bản chất của php.Php không phải là một máy chủ ứng dụng có thể ngồi ở đó giữa các yêu cầu và quản lý các tham chiếu đến một nhóm các kết nối mở, ít nhất là không có một số loại hack lớn. Tôi nghĩ về lý thuyết bạn có thể viết một máy chủ ứng dụng trong php và chạy nó như là một tập lệnh dòng lệnh sẽ chỉ ở đó trong nền và giữ một loạt các kết nối db mở và chuyển các tham chiếu đến chúng tới các kịch bản khác của bạn, nhưng tôi không biết điều đó có thể thực hiện được không, làm thế nào bạn có thể chuyển các tham chiếu từ kịch bản lệnh của bạn sang các kịch bản khác, và tôi nghi ngờ nó sẽ hoạt động tốt ngay cả khi bạn có thể kéo nó ra. Dù sao thì đó chủ yếu là suy đoán. Tôi đã chỉ cần thông báo liên kết một người nào khác được đăng lên một mô-đun apache để cho phép kết nối tổng hợp cho các máy chủ prefork như php. Có vẻ thú vị: https://github.com/junamai2000/mod_namy_pool#readme

+3

"Kết nối đến máy chủ SQL sẽ không bị đóng khi thực thi kịch bản kết thúc. " - http://www.php.net/manual/en/function.mysql-pconnect.php – RandomSeed

+2

điều này không chính xác trên PHP-FPM và Apache/mod_php. –

+0

"Cách tốt nhất để sử dụng kết nối db trong php là tạo một thể hiện đơn lẻ của đối tượng db để kết nối được tái sử dụng trong ngữ cảnh thực thi tập lệnh của bạn." - Đây là ngỗng vàng tôi đang tìm kiếm. Cách tuyệt vời để giải thích chính xác nơi và tại sao singleton sẽ hữu ích! – samazi

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