2012-06-10 29 views
15

Tôi biết pymongo là chủ đề an toàn và có hồ bơi kết nối sẵn có.pymongo kết nối tổng hợp và yêu cầu của khách hàng

Trong một ứng dụng web mà tôi đang làm việc, tôi đang tạo một cá thể kết nối mới theo mọi yêu cầu.

sự hiểu biết của tôi là kể từ pymongo quản lý hồ bơi kết nối, nó không phải là cách tiếp cận sai lầm khi tạo một kết nối mới trên mỗi yêu cầu, như ở phần cuối của yêu cầu trường hợp kết nối sẽ được khai hoang và sẽ có mặt trên yêu cầu tiếp theo .

Tôi có chính xác ở đây hay tôi chỉ cần tạo một cá thể để sử dụng trên nhiều yêu cầu?

Trả lời

8

"Cách tiếp cận sai" phụ thuộc vào kiến ​​trúc của ứng dụng của bạn. Với pymongo là thread-safe và kết nối tự động tổng hợp, việc sử dụng thực tế của một kết nối chia sẻ duy nhất, hoặc nhiều kết nối, sẽ "làm việc". Nhưng kết quả sẽ phụ thuộc vào những gì bạn mong đợi hành vi được. Các ý kiến ​​tài liệu về cả hai trường hợp.

Nếu ứng dụng của bạn được tạo luồng, từ tài liệu, mỗi chuỗi truy cập kết nối sẽ có ổ cắm riêng. Vì vậy, cho dù bạn tạo một kết nối được chia sẻ duy nhất, hoặc yêu cầu một kết nối mới, nó đi xuống để xem các yêu cầu của bạn có được tạo luồng hay không.

Khi sử dụng gevent, bạn có thể có một ổ cắm trên mỗi greenlet. Điều này có nghĩa là bạn không cần phải có một chuỗi đúng cho mỗi yêu cầu. Các yêu cầu có thể không đồng bộ và vẫn nhận được socket riêng của chúng.

Tóm lại:

  • Nếu yêu cầu webapp của bạn được luồng, sau đó nó không quan trọng mà cách bạn truy cập vào một kết nối mới. Kết quả sẽ giống nhau (socket per thread)
  • Nếu webapp của bạn không đồng bộ qua gevent, thì việc bạn truy cập vào một conection mới là không quan trọng. Kết quả sẽ giống nhau. (socket per greenlet)
  • Nếu ứng dụng web của bạn không đồng bộ, nhưng KHÔNG qua gevent, thì bạn phải xem xét các ghi chú trên best suggested workflow.
Các vấn đề liên quan