2015-05-26 24 views
5

Tôi đang sử dụng Npgsql để truy cập PostgreSQL qua .NET. Tôi quan tâm đến đúng cách để thực hiện các kết nối tới cơ sở dữ liệu, vì theo tôi đây là một hoạt động tốn kém để mở một kết nối và sau đó đóng nó mỗi lần tôi muốn thực hiện một số giao dịch.Kỹ thuật tốt cho các kết nối với PostgreSQL

Vì vậy, đây là ý tưởng chung:

public class PostgreSQL 
{ 
    private NpgsqlConnection conn; // <- one connection for this object, open all the time 

    public PostgreSQL(string connString) 
    { 
     conn = new NpgsqlConnection(connString); 
     conn.Open(); 
    } 

    // ...here making some queries... 

    public void Close() => conn.Close(); // <- use this in the very end of the program 
} 

Như bạn thấy ở trên, tôi có một kết nối cho một thể hiện của lớp PostgreSQL.

Câu hỏi của tôi:

Là cách tiếp cận này phải không? Hoặc tôi có nên mở và đóng kết nối mỗi lần tôi muốn thực hiện giao dịch - mở càng muộn càng tốt và đóng càng sớm càng tốt?

Nếu tôi nên mở và kết nối chặt chẽ mỗi lần duy nhất - tôi nên viết một hàng đợi đó sẽ giới hạn số lượng kết nối đồng thời? Hoặc PostgreSQL sẽ tự xử lý nó - và về mặt lý thuyết, tôi có thể mở 200 kết nối và nó sẽ ổn thôi.

Xin hãy chia sẻ kinh nghiệm của bạn với tôi ^^

EDIT: tôi sẽ chạy 100-200 truy vấn một giây.

+0

Bạn có thể nên thêm tần suất bạn muốn truy vấn cơ sở dữ liệu. –

+0

@JakubKania Chỉ cần thêm nó, 100-200 truy vấn một giây. –

+2

'Npgsql' có tích hợp kết nối tổng hợp, do đó, tuy nhiên bạn thực hiện các truy vấn các kết nối sẽ không được đóng hoàn toàn và mở ngay cả khi bạn gọi' Close() 'và' Open() '. Nhưng nó là một ứng dụng máy tính để bàn? Các truy vấn có đồng thời không? –

Trả lời

3

Theo ý kiến ​​của tôi, bạn nên mở kết nối tại thời điểm bạn cần và kết nối ngay sau đó. Điều này sẽ ngăn chặn rất nhiều kết nối trên máy chủ để được giữ sống.

Theo kinh nghiệm của tôi, việc mở kết nối không mất nhiều thời gian (một vài phần nghìn giây, thường là một phần thời gian thực hiện), vì vậy bạn không phải lo lắng quá nhiều.

3

PostgreSQL hỗ trợ kết nối tổng hợp (kích thước hồ bơi là customizable) để mô hình chung:

using (NpgsqlConnection conn = new NpgsqlConnection(...)) 
{ 
... 
} 

nên là sự lựa chọn tốt hơn.

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