8

Tôi rất mới với MongoDB và NoSQL nói chung và tôi vừa bắt đầu xây dựng một trang web với MongoDB/Norm/ASP.NET MVC 3.Khi nào tôi nên mở và đóng các kết nối MongoDB?

Tôi tự hỏi làm cách nào tôi nên dò tìm kết nối đến cơ sở dữ liệu Mongo của mình .

Ngay bây giờ tôi có một Basecontroller instanciates MongoSession và onActionExecuted tôi vứt bỏ nó để tất cả các bộ điều khiển derived của tôi sẽ có quyền truy cập vào MongoSession của tôi. Lớp MongoSession mở một kết nối trong hàm khởi tạo của nó và hủy bỏ nó trên Dispose(), cách nó đang làm việc ngày hôm nay.

private IMongo _mongo; 

public MongoSession() 
{   
    _mongo = Mongo.Create("connString");  
} 

public void Dispose() 
{ 
    _mongo.Dispose(); 
} 

Tôi hơi lo lắng rằng có thể đang giữ kết nối mở quá lâu nếu tôi đang làm các công cụ khác trong bộ điều khiển.

Cách tiếp cận đó có đủ để không mạo hiểm khi giữ quá nhiều kết nối mở hay tôi nên làm điều gì đó giống như phương pháp ví dụ bên dưới?

public void Add<T>(T item) where T : class, new() 
    { 
     using (var mongo = Mongo.Create("connString")) 
     { 
     mongo.GetCollection<T>().Insert(item); 
     } 
    } 

Một theo dõi câu hỏi là:

đang mở và đóng kết nối MongoDB qua Norm hoạt động "đắt tiền"?

+0

Norm được hầu như không được duy trì nữa, nếu bạn muốn hỗ trợ LINQ đi với tài xế Mongo chính thức với FluentMongo trên đầu trang của nó. –

+0

Bên cạnh câu hỏi này về việc mở và đóng các kết nối trên mã, tôi đã gặp sự cố với kết nối nhà cung cấp dịch vụ internet, sau đó mã của tôi có EndOfStreamException. Tôi đã giải quyết nó bằng cách sử dụng settings.MaxConnectionIdleTime = TimeSpan.FromSeconds (30); https://stackoverflow.com/a/44606284/194717 – Tony

Trả lời

8

Tôi sẽ để kết nối mở khi tạo lại kết nối tốn kém. Mongo là tốt với nhiều kết nối, mở trong một thời gian dài. Điều bạn nên làm là chia sẻ kết nối với tất cả các phần của ứng dụng như một kết nối liên tục. Trình điều khiển C# nên đủ thông minh để tự làm điều này, để nó không tạo ra quá nhiều kết nối, vì nội bộ nó sử dụng "kết nối tổng hợp" làm cho nó thậm chí tái sử dụng các kết nối. Các tài liệu nói: "Các kết nối đến máy chủ được xử lý tự động sau hậu trường (một hồ bơi kết nối được sử dụng để tăng hiệu quả)."

cổ vũ, Derick

+1

Đồng ý. Trong thực tế, bạn thậm chí không thực sự cần phải viết một lớp MongoSession - lưu trữ một cá thể MongoServer trong phạm vi ứng dụng sẽ là thích hợp. Bạn gần như chắc chắn sẽ gọi Disconnect() trên cá thể này chỉ một lần, khi ứng dụng MVC đóng lại. –

+0

@Sean Cảm ơn bạn đã tìm mẹo khi kết nối. –

2

Bạn không cần phải gọi Connect hoặc Ngắt

CáC# tài xế C có một hồ bơi kết nối để sử dụng kết nối đến máy chủ một cách hiệu quả. Không cần phải gọi Connect hoặc Disconnect; chỉ cần để cho người lái xe chăm sóc các kết nối (gọi Connect là vô hại, nhưng gọi Disconnect là xấu vì nó đóng tất cả các kết nối trong nhóm kết nối).

http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver/

+0

liên kết (bây giờ) không đề cập đến bất cứ điều gì, nó chỉ là một trang phụ huynh của một số người khác. – danio

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