2010-02-25 14 views
5

Tôi đang làm việc trên một ứng dụng web đang tiêu thụ một Tập dữ liệu được một dịch vụ web trả về.Tại sao nên hoặc không nên lưu trữ một Tập dữ liệu, Datatable, vv như là một biến phiên trong một trang ASP.NET?

Khi ứng dụng đang chạy, tôi lưu trữ Tập dữ liệu dưới dạng biến phiên được sử dụng lặp đi lặp lại khi người dùng điều hướng đến các trang khác nhau sẽ chỉnh sửa bảng trong tập dữ liệu.

Ý tưởng là người dùng sẽ chỉ phải chờ dữ liệu một lần khi ứng dụng tải sau đó ứng dụng sẽ sử dụng biến phiên cho đến khi người dùng lưu thay đổi họ đã thực hiện, khi điều đó xảy ra, nó sẽ chuyển các bảng đã chỉnh sửa sang dịch vụ để cập nhật cơ sở dữ liệu.

Có vấn đề với thiết kế này và lưu trữ Tập dữ liệu và Datatables dưới dạng biến phiên không? Ưu và khuyết điểm cho tôi biết.

Trả lời

6

Các pro chỉ là:

  • Đó là nhanh hơn nhiều lần đi cơ sở dữ liệu của bạn. Điều đó nói rằng, cơ sở dữ liệu doanh nghiệp làm đủ bộ nhớ đệm mà bạn không thường xuyên cần.

Các nhược điểm là legion nhưng chính ba sẽ là:

  • Nếu dữ liệu được thay đổi từ phiên khác (chẳng hạn một người dùng admin), phiên của người dùng của bạn không biết
  • cấp phát bộ nhớ có thể là một vấn đề nghiêm trọng rất nhanh (mặc dù điều này có thể được giảm bớt bằng cách sử dụng Cache thay vì Session và keying trên Session ID)
  • Nếu bạn chuyển đến một trang trại máy chủ, bạn sẽ phải suy nghĩ lại toàn bộ thiết kế của mình sử dụng DB để lưu trữ Dữ liệu phiên - khi đó, đối số hiệu quả của bạn sẽ trông hơi yếu

[Edit] Như những người khác đã chỉ ra, cũng có vấn đề với việc lưu bất kỳ thứ gì trong phiên hoặc bộ nhớ cache (hoặc ở mức độ thấp hơn). Nếu Session hết hạn, hoặc thậm chí reset chính nó (tôi đã thấy cấu hình phần cứng khiến Session bắt đầu và kết thúc với mọi yêu cầu. Mặc dù nó vẫn giữ lại Session ID, bất kỳ dữ liệu nào được lưu trong các đối tượng Session bị mất. Lý do, tất cả các đối tượng Session, Cache và Application đều bị xóa, các đối tượng Cache có thể xóa các phần tử bất cứ lúc nào, chỉ vì môi trường quyết định nó muốn không gian bộ nhớ cho một thứ khác.

Nếu bạn cần người dùng có thể thực hiện thay đổi và sau đó nhấn Lưu để tiếp tục, hãy giữ một bộ bảng trạng thái cụ thể chi tiết các thay đổi sẽ được thực hiện cho bảng chính khi người dùng nhấn vào Lưu Lưu trữ cookie trên máy khách bằng khóa sẽ hết hạn trong tương lai; sử dụng cookie đó để khớp dữ liệu Tiểu bang của bạn với Người dùng.

+0

Chỉ cần làm rõ, nó chỉ là một chuyên nghiệp nếu dữ liệu phiên có thể được tải lại từ cơ sở dữ liệu nếu phiên hết hạn. Trong trường hợp của OP, phiên chứa các thay đổi chưa lưu, không thể truy xuất được phiên nếu hết hạn. –

+0

Điểm rất hợp lệ, Brian. Sẽ thêm một cái gì đó về điều đó để làm cho câu trả lời hoàn chỉnh hơn. – pdr

+0

Cảm ơn bạn rất nhiều vì câu trả lời tuyệt vời. Thời gian để làm một chút refactoring vì trường hợp không làm điều này là quá mạnh mẽ. –

3

Big con: DataSets rất lớn, do đó việc giữ tất cả chúng trong bộ nhớ máy chủ là một vấn đề, đặc biệt khi số lượng người dùng bắt đầu tăng.

1

Dữ liệu có dành riêng cho người dùng không? Nếu không thì bạn sẽ lưu trữ "không có người dùng đăng nhập" vào thời điểm có thể đặt dữ liệu. Có thể bạn có thể sử dụng một số loại cơ chế bộ nhớ cache, nếu bạn đang bận tâm về độ trễ.

4

Giữ quá nhiều trong phiên giao dịch có nguy cơ rằng:

  • Nhiều người dùng đều có một phiên lớn sẽ đòi hỏi tài nguyên máy chủ hơn.
  • Nếu phiên của người dùng hết hạn (ví dụ: gián đoạn cuộc gọi điện thoại đó), tất cả trạng thái của anh ấy sẽ bị mất và anh ấy sẽ cần phải bắt đầu lại quá trình. Lưu trữ dữ liệu của mình khi anh di chuyển qua các trang web có thể dẫn đến trải nghiệm dễ chịu hơn nếu anh chọn tiếp tục sau này.

Nếu bạn phải lưu trữ nội dung nào đó trong phiên, để làm những gì bạn mô tả có thể xem xét một loại cụ thể cho mục đích này thay vì Tập dữ liệu chung hoặc DataTable.

+0

Hết hạn phiên là lý do điều này sẽ không hoạt động, ngay cả ở quy mô nhỏ. Mặc định là khoảng 20 phút. Tôi đã có người dùng tốt hơn 45 phút trên một trang mà không lưu. –

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