2012-05-06 34 views
11

Gần đây tôi đã có một số tình huống mà tôi cần dữ liệu khác nhau từ cùng một bảng. Một ví dụ là nơi tôi sẽ lặp qua từng "trình điều khiển phân phối" và tạo tệp PDF có thể in cho từng khách hàng mà họ cung cấp.Truy vấn danh sách <T> hoặc cơ sở dữ liệu có nhanh hơn không?

Trong tình huống này, tôi kéo tất cả khách hàng và lưu trữ chúng vào

List<Customer> AllCustomersList = customers.GetAllCustomers(); 

Như tôi looped thông qua các trình điều khiển giao hàng, tôi muốn làm một cái gì đó như thế này:

List<Customer> DeliveryCustomers = AllCustomersList.Where(a => a.DeliveryDriverID == DriverID); 

Câu hỏi của tôi: Liệu cách tôi đang làm điều đó bằng cách truy vấn đối tượng List nhanh hơn truy vấn cơ sở dữ liệu mỗi lần cho các bản ghi khách hàng liên kết với trình điều khiển phân phối?

+0

Tôi không thể quan niệm cách kéo dữ liệu từ cơ sở dữ liệu sẽ tốt hơn sau đó làm mọi thứ trong bộ nhớ như bạn hiện đang làm ... Điều duy nhất tôi có thể làm là đảm bảo bạn không kéo dữ liệu THÊM sẽ sử dụng ... – Jared

+1

Truy vấn danh sách phải nhiều, nhanh hơn nhiều vì nó sẽ được lưu trữ trong bộ nhớ. – xbonez

+0

Tại thời điểm nào nó sẽ trở thành quá nhiều dữ liệu để đưa vào danh sách và cần phải sử dụng cơ sở dữ liệu? – Ricketts

Trả lời

11

Có không phải là một số chính xác cho số lượng hàng rằng nếu bạn vượt qua nó, bạn nên truy vấn DB thay vì ở trong bộ nhớ List<T>

Nhưng sự cai trị của ngón tay cái là, DB được thiết kế để làm việc với số lượng lớn dữ liệu và họ có tối ưu hóa "cơ chế" trong khi trong bộ nhớ không có những thứ như vậy.

Vì vậy, bạn sẽ cần phải chuẩn nó để xem nếu khứ hồi đến DB là giá trị nó cho số tiền mà hàng cho mỗi lần nó quan trọng với bạn là

"Chúng ta nên quên đi hiệu quả nhỏ, nói rằng khoảng 97% thời gian: non tối ưu hóa là gốc rễ của tất cả các chuyến đi ác "

+0

Cảm ơn bạn! Cụm từ đó khiến tôi xem xét lại cách tiếp cận của mình! +1 –

1

Tránh vòng để DB là một trong những nguyên tắc quan trọng liên quan đến cơ sở dữ liệu điều chỉnh hiệu suất, đặc biệt là khi DB nằm trên mạng và có nhiều người dùng truy cập vào i t.

Từ quan điểm khác, đưa các bộ kết quả lớn vào bộ nhớ như dữ liệu khách hàng của bạn, không hiệu quả và có thể không nhanh hơn việc chuyển sang DB khi bạn cần chúng.

Sử dụng tốt trong bộ sưu tập bộ nhớ để tránh các chuyến đi khứ hồi là để bạn tra cứu bảng (ví dụ: danh mục khách hàng, khu vực khách hàng, v.v.) không thay đổi thường xuyên. Bằng cách đó bạn tránh tham gia vào khách hàng chính của bạn chọn truy vấn làm cho nó thậm chí còn nhanh hơn.

0

Tại sao không sử dụng Redis? , Đó là một cơ sở dữ liệu trong bộ nhớ và nó rất nhanh.

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