mgo.Session
là an toàn để sử dụng đồng thời. Trích dẫn từ tài liệu của nó:
Tất cả các phương thức Session đều an toàn đồng thời và có thể được gọi từ nhiều goroutines.
Nhưng điều này không có nghĩa là bạn không nên tạo và sử dụng song song nhiều trong số chúng bằng cách gọi Session.Copy()
hoặc Session.Clone()
, vào phiên đầu tiên có được tại thời điểm quay số.
An toàn đồng thời và có lợi khi sử dụng nhiều hơn không loại trừ nhau (chúng không loại trừ lẫn nhau ). Mặc dù bạn có thể sử dụng một mgo.Session
duy nhất từ số lượng tuyến sinh dục tùy ý, sẽ không mở rộng quy mô tốt, sẽ không mở rộng quy mô ở tất cả . Các phiên tự động quản lý một nhóm kết nối, thậm chí có thể tới nhiều nút máy chủ, nhưng nếu bạn đang sử dụng một Session
, bạn đang không tận dụng điều đó. Bằng cách tạo một Session
mới ở đầu mỗi yêu cầu của bạn (nếu cần) và đóng nó đúng cách ở cuối (với Session.Close()
; tốt hơn là được gọi bằng cách sử dụng defer
), bạn đang tận dụng khả năng sử dụng nhiều kết nối cùng một lúc, có thể tới nhiều nút máy chủ (nếu có), và do đó sử dụng tài nguyên máy chủ tốt hơn; và nhận được thời gian phản hồi nhanh hơn (cả từ cơ sở dữ liệu và cuối cùng là tới người dùng cuối HTTP của bạn). Đang gọi Session.Close()
không đóng kết nối cơ bản với máy chủ, nó sẽ chỉ đặt kết nối trở lại nhóm, sẵn sàng được chọn bởi một phiên khác.
Cũng xem câu hỏi liên quan về việc sử dụng Session
s:mgo - hiệu suất truy vấn dường như luôn chậm (500-650 mili giây)