TỐI ƯU HÓA CƠ SỞ DỮ LIỆU

Một phần của tài liệu Tiểu luận môn Phát triển hệ thống Thương mại điện tử (BoEC) (Trang 47 - 52)

Có 2 hướng tiếp cận để tối ưu hóa cơ sở dữ liệu:

o Tối ưu hiệu quả lưu trữ: giúp tiết kiệm bộ nhớ và lưu trữ hiệu quả.

o Tối ưu tốc độ truy cập.

Việc tiếp cận theo 2 hướng thường xung đột lẫn nhau đồng nghĩa với việc chúng ta phải đánh đổi.

6.1. Optimizing Storage Efficiency (Tối ưu hóa hiệu quả lưu trữ)

Các bảng lưu trữ bộ nhớ hiệu quả trong cơ sở dữ liệu quan hệ là khi nó có ít dữ liệu thừa và rất ít cell có giá trị null. Việc có giá trị null nói lên rằng bộ nhớ đã bị phung phí. Giá trị null cũng khiến chúng ta khó khăn trong việc xác định giá trị null thực sự có ý nghĩa gì.

Normalization (chuẩn hóa) là quá trình áp dụng các luật trong các bảng cơ sở dữ liệu quan hệ để đánh giá hiệu quả lưu trữ của từng bảng.

Có 3 dạng chuẩn: 1NF – 2NF – 3NF

• Dạng 1NF: Tất cả các column chỉ chứa giá trị đơn lẻ. ▪ Dấu hiệu: bảng có các trường lặp lại.

▪ Giải quyết: Loại bỏ trường bị lặp lại. Thêm một bảng chứa các trường bị lặp lại đó.

• Dạng 2NF: yêu cầu data model có dạng 1NF và các trường phụ thuộc hoàn toàn vào khóa chính. ▪ Dấu hiệu: Khóa chính của bảng là kết hợp nhiều hơn 1 trường, có một vài trường phụ thuộc một phần vào khóa chính.

▪ Giải quyết: Loại bỏ phụ thuộc một phần. Thêm bảng mới chứa các trường mà phụ thuộc một phần vào khóa chính đó.

• Dạng 3NF: model thỏa mãn cả 1NF và 2NF và không có trường nào phụ thuộc vào trường không khóa.

▪ Dấu hiệu: có một vài trường phụ thuộc vào trường không khóa.

▪ Giải quyết: loại bỏ các trường phụ thuộc đó. Thêm một bảng khác chứa các trường đã bị loại bỏ.

6.2. Tối ưu truy cập dữ liệu(Optimizing Data Access Speed)

Sau khi tối ưu bộ nhớ lưu trữ, chúng ta sẽ có thêm rất nhiều bảng mới. Khi đó sẽ sinh ra một vấn đề mới khi chúng ta muốn lấy dữ liệu từ nhiều bảng thì phải thực hiện join các bảng trước.

Việc Join các bảng mất rất nhiều thời gian, đặc biệt là khi kết hợp các bảng lớn với nhau. Một vài kĩ thuật để tăng tốc xử lý dữ liệu, bao gồm: denormalization, clustering và indexing.

48

Denormalization rất thích hợp trong trường hợp thông tin trong bảng được query thường xuyên nhưng ít update. Các trường hợp nên áp dụng denormalization:

▪ Thứ nhất, áp dụng với các bảng thường xuyên tìm kiếm (look-up tables). Giữ lại các trường liên quan ở lại look-up tables khi các trường đó thường xuyên được query cùng và các trường đó ít thay đổi.

▪ Thứ hai, quan hệ one-to-one rất thích hợp cho denormalization. Gộp các trường vào chung một bảng giúp tăng tốc độ query khi không phải join 2 bảng với nhau.

▪ Thứ ba, thêm các thuộc tính của thực thể cha vào thực thể con. Tăng hiệu quả và tốc độ query khi thuộc tính ở thực thể cha thường xuyên được query cùng với các trường của thực thể con.

Clustering: tốc độ truy cập cũng bị ảnh hưởng bởi cách dữ liệu được truy xuất.

▪ Truy xuất dữ liệu tuyến tính, truy cập mọi records trong bảng để lấy kết quả là phương thức truy xuất dữ liệu kém hiệu quả nhất.

▪ Việc sử dụng clustering(phân cụm) giúp câu lệnh query chỉ truy cập đến vùng mà được phân cụm trước.

▪ Mỗi bảng có duy nhất một chiến lược phân cụm.

Indexing: Indexes là một trong những giải pháp hiệu quả nhất giúp tăng hiệu năng của cơ sở dữ

liệu.

▪ Áp dụng có chọc lọc với hệ thống cơ sở dữ liệu tác nghiệp hoặc các hệ thống yêu cầu nhiều lệnh update.

▪ Nên áp dụng Indexes với hệ thống hỗ trợ ra quyết định.

6.3. Tối ưu data model project BoEC 6.3.1. Áp dụng Denormalization 6.3.1. Áp dụng Denormalization

- Bảng Order:

Thêm trường CustomerName vào bảng Order vì khi access bảng Order, người quản lý muốn biết Order đó của khách hàng nào một cách nhanh chóng.

49 - Bảng Publisher và Manufacturer:

Denormalization: bằng cách thêm trường Address chi tiết, với kiểu dữ liệu varchar(255) có dạng: streetAddress-city-state-country.

Khi truy xuất tới bảng Publisher và Manufacturer để tìm thông tin nhà phân phối và nhà sản xuất, quản lý rất quan tâm đến địa chỉ của họ ở đâu. Nên việc bổ sung trường address tại 2 bảng giúp tăng tốc query mà không cần phải join bảng Address với Publisher và Manufacturer nữa.

6.3.2. Indexing

- Việc đánh index trong các bảng thường xuyên được query là rất quan trọng và đó cũng là một trong những phương pháp tối ưu để tăng hiệu năng truy xuất dữ liệu.

• Tạo index với bảng Product:

50 • Index với bảng OrderItem:

Với bảng Order, vì đặc tính thừa xuyên update trạng thái của Order nên em sẽ không đánh index vào bảng đó.

Index được ưu tiên đánh ở trong các trường hợp:

- Là bảng thường xuyên tìm kiếm, ít các giao tác Update - Tại mỗi bảng, tạo unique index cho khóa chính.

- Với các khóa ngoại, tạo index để tăng tốc độ join giữa các bảng.

- Đánh index với các trường được sử dụng thường xuyên cho Grouping, Sorting, ..

52

Một phần của tài liệu Tiểu luận môn Phát triển hệ thống Thương mại điện tử (BoEC) (Trang 47 - 52)

Tải bản đầy đủ (PDF)

(83 trang)