Thứ Ba, 9 tháng 6, 2009

Xây dựng ứng dụng Web trên tập dữ liệu lớn

Nếu phải xây dựng 1 ứng dụng web trên một tập dữ liệu quá lớn (hàng tỷ recoed) thì vấn đề truy xuất, tìm kiếm dữ liệu là bài toán không đơn giản.

Sau khi suy ngẫm, tìm hiểu, tham khảo, mình đã có 1 cách làm (đang thử nghiệm…):

- DBMS đã được thiết kế để không ngốn quá nhiều tài nguyên trong khi chạy. Vì vậy nó không sử dụng hết khả năng của RAM, CPU, mà đôi khi ta thấy “tiếc của giời”. Chính vì vậy khi dữ liệu quá lớn tốc độ thực thi vẫn cứ chậm, do đó ta nên nghĩ đến khả năng là lôi toàn bộ (hoặc những gì ta cần) dữ liệu lên RAM rồi thực hiện tìm kiếm trên đó cho nhanh.

- Nếu đã sử dụng phương pháp trên thì nên cân nhắc lại việc đặt Indexes trên các trường tìm kiếm của Database vì nó chẳng phục vụ gì khi tìm kiếm trên RAM cả. Hơn nữa nếu đặt Indexes khi ta Insert, Update dữ liệu sẽ rất tốn kém thời gian vì DBMS phải thực hiện build lại indexes, tạo tệp tin chỉ mục,…

- Trong sự kiện Application_On_Start ta thực hiện đọc dữ liệu (tất cả hoặc một phần liên quan đến search) vào một Dataset (sử dụng phương thức Fill của DataAdapter). Tất các các Session sau đó sẽ sử dụng chung dữ liệu này. Chú ý là nên đặt các dữ liệu chung này ở tầm vực Static.

- Tại mỗi session ta thực hiện tạo các DataView cho các DataTable dùng chung này sau đó thực hiện tìm kiếm, sắp xếp, … trên DataView.

- Để tìm kiếm nhanh trên DataView, hãy tham khảo bài trước.

- Khi có cập nhật dữ liệu từ các session thì ta cập nhật trực tiếp vào DataTable sau đó thực hiện cập nhật lại dữ liệu nguồn trên DB thông qua DataAdapter (chỉ cập nhật sau khi đã Getchanged()).

Không có nhận xét nào: