Bitmap Index

Một phần của tài liệu Data warehouse lý thuyết và thực tiễn (Trang 70)

6 Kỹ thuật để xử lý truy vấn hiệu quả trên OLAP

6.1 Bitmap Index

Hình vẽ 1. Bitmap index

Bitmap Index (Index theo kiểu ánh xạ bits) là một kiểu index hay được sử dụng trong một số trường hợp sau:

 Khi table có nhiều rows và các cột khoá có giá trị khác nhau rất ít. Điều đó có nghĩa là có rất ít sự khác nhau trong giá trị của các cột. Ví dụ Bitmap Index thích hợp hơn đối với các cột giới tính (Nam hay Nữ).

 Khi truy vấn có kết hợp sử dụng nhiều mệnh đề trong phần điều kiện WHERE. Mệnh đề truy vấn sử dụng các phép toán logic OR.

 Khi các cột khoá là read-only (chỉ đọc) hay có rât ít hoạt động cập nhật các cột khoá.

Cấu trúc của Bitmap Index

Một Bitmap index cũng được tổ chức như là B-TREE index, nhưng phần lá của mỗi node lưu một dãy các bit cho mỗi khoá thay vì danh sách các ROWID. Mỗi bit trong danh sách Bitmap đó tương ứng với một ROWID, và nếu giá trị bit đó được khởi tạo, điều đó có nghĩa là hàng có ROWID tương ứng sẽ chứa giá trị khoá.

Sử dụng Bitmap index

Bitmap-TREE index sử dụng để thiết lập phần lá của các node, phần này sẽ chứa đoạn bitmap được sử dụng để xác định hàng chứa giá trị khoá.

Khi có thay đổi trên các cột khoá trong table, các chuỗi bitmap cần được thay đổi theo. Kết quả là sẽ sinh ra các khoá trên các bitmap segment liên quan do quá trình phân đoạn các khoá này đòi hỏi thực hiện trên toàn bộ bitmap segment. Một row quản lý bởi bitmap sẽ không thể cập nhật bởi các transaction khác đến khi transaction đầu kết thúc.

Với chiều sản phẩm có 3 giá trị là TV, PC, Phone ta có Bitmap – index là

rid mục hàng thành phố Tháng TV Doanh số 1001 LA Jan 100 PC 1002 LA Jan 200 PC 1003 NY Jan 150 PC 1004 NY Feb 100 Phone 1005 NY Jan 175 TV 1006 NY Feb 200 Phone 1007 LA Jan 300 Phone 1008 LA Feb 120

6.2 Sử dụng kỹ thuật tính toán trƣớc khối dữ liệu [4]

6.2.1 Điểm khởi đầu

Kỹ thuật này sử dụng sơ đồ lưới khối của dữ liệu. Như chúng ta đã biết các phép toán thống kê sẽ được yêu cầu dựa trên một tập các chiều. Có thể là điều kiện trên một chiều, có thể điều kiện với 2 hay 3 chiều,…

Ví dụ: một khối 3 chiều là cha của 3 khối 2 chiều, mỗi khối được tạo thành từ 2 chiều khác nhau của khối cha. Rõ ràng là chúng ta không cần thiết phải tính toán một cách độc lập trên 4 view.

Kỹ thuật này thực chất là tính toán trước các truy vấn cơ sở thường được yêu cầu bởi người sử dụng. Từ kết quả của các truy vấn tính trước này có thể làm cơ sở thu được kết quả các truy vấn khác. Dựa trên lưới các khối để chọn lựa vác view được tính trước.

Ví dụ: Mô hình nhà kho dữ liệu của hệ thống cửa hàng trong đó các nhà cung cấp (supplier – s) bán các sản phẩm (Part –p) cho khách hàng (Customer –c). Cơ sở dữ liệu có chứa thông tin về mỗi giao tác bán hàng trong vòng 6 năm. Có 3 chiều đáng quan tâm : chiều p- Part , chiều s- Supplier và chiều c – Customer và độ đo đáng quan tâm là tổng doanh thu. Vì thế đối với mỗi cell (p,s,c) trong data cube 3-D sẽ lưu trữ doanh thu của sản phẩm p do nhà cung cấp s bán cho khách hàng c.

Người dùng cần quan tâm đến tổng doanh thu từng bộ phận p bán các sản phẩm cho 1 khách hàng c đối với tất cả các nhà cung cấp bằng cách thêm vào 1 giá trị “ALL” vào chiều nhà cung cấp từ đó để trả lời cho câu truy vấn đó ta chỉ cần nhìn vào cell (p,ALL,c). Tương tự thêm các giá trị “ALL” cho các chiều khác.

Chúng ta có thể chọn lựa một trong các cách cài đặt sau:

- Cách 1: Cài đặt vật lý toàn thể data cube. Hướng này cho thời gian hồi đáp câu truy vấn tốt nhất. Tuy nhiên, việc tính toán trước và lưu trữ mỗi cell không là một sự chọn lựa khả thi đối với các data cube lớn. Khi đó vùng không gian lưu trữ tiêu tốn quá mức. Chú ý rằng vùng không gian lưu trữ bởi data cube cũng là một tiêu chí để đánh

1 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 1 1 PC Phone TV

giá về thời gian tạo data cube đó. Vùng không gian tiêu thụ cũng ảnh hưởng đến việc tạo chỉ mục và vì thế gia tăng thêm tổng chi phí.

- Cách 2: Không tính trước một query nào. Trong trường hợp này, chúng ta cần phải truy xuất dữ liệu thô để tính toán mỗi cell khi có yêu cầu. Hướng tiếp cận này gây ra vấn đề về thời gian chờ để truy vấn đến hệ thống. Hướng này không thêm vùng vùng không gian ngoại trừ vùng vùng không gian dành cho dữ liệu thô được yêu cầu.

- Cách 3: Tính trước chỉ một phần data cube. Đây là hướng tiếp cận nên được chọn lựa. Trong data cube, có nhiều cell mà giá trị của nó có thể tính từ các cell khác trong data cube đó. Sự phụ thuộc này tương tự với bảng tính trong excel, trong đó giá trị của các cell có thể được biểu diễn như là một hàm của các giá trị của các cell khác. Chúng ta gọi các cell đó là các cell phụ thuộc.

Ví dụ: Chúng ta có thể tính giá trị cho cell (p,ALL,c) như là tổng các giá trị của các cell (p,s1,c), (p,s2,c),… , (p,sn,c) trong đó n là số các nhà cung cấp. Càng nhiều cell được tính trước thì việc thi hành query càng tốt. Tuy nhiên, đối với data cube lớn thì chúng ta chỉ có thể tính trước chỉ một phần nhỏ của các cell của data cube đó mà thôi. Vì vùng không gian lưu trữ có giới hạn và các ràng buộc khác.

Một view (hay query) trên Khối dữ liệu là một câu lệnh SQL trong đó mệnh Group by thực hiện trên 1 tập xác định thuộc tính. Có thể đại diện cho một truy vấn S bằng tập (D1, D2, .., Di) với Di là thuộc tính có trong Khối dữ liệu.

Từ ví dụ trên ta có lưới các view như sau:

Trong đó mỗi node trên lưới là 1 view, đường nối biểu thị quan hệ phụ thuộc truy vấn. Số hàng trong kết quả truy vấn (tính theo triệu) được ghi chú ở bên. Truy vấn (p,c) có thể được suy ra từ truy vấn (p,s,c), hay truy vấn p có thể suy ra từ truy vấn (p,s). Chi phí mỗi truy vấn được xác định bằng số bản ghi kết quả.

psc 6M

pc 6M ps 0.8M sc 6M

p 0.2M s 0.01M c 0.1M

Truy vấn c có thể tính từ (p,c) như sau:

SELECT Customer, SUM(Sales) AS Sales FROM Part_Customer

GROUP BY Customer

Ta có thể dùng lưới này để chọn ra truy vấn được cài đặt trước sao cho giảm thời gian trả lời các truy vấn khác. Vì truy vấn đỉnh có mặt tất cả các chiều trong Group by nên nó không được trả lời bởi bất cứ các truy vấn nào khác. Truy vấn đỉnh này cần phải được cài đặt trước

6.2.2 Định nghĩa hình thức

Phần trên chúng ta thảo luận sơ bộ trên tập các chiều. Tuy nhiên trong trường hợp tổng quát, thì còn phải xét đến sự có mặt của phân cấp các chiều. Sau đây là một số khái niệm hình thức hóa nhằm đưa ra những cơ sở toán học vững chắc cho việc tối ưu tính trước dữ liệu khối

Quan hệ phụ thuộc của các truy vấn: Ta nói truy vấn Q1 phụ thuộc truy vấn Q2 trong trường hợp kết quả của Q1 có thể suy ra từ kết quả của Q2. Ký hiệu Q1 ≤Q2.

Quan hệ phụ thuộc có các tính chất sau: - tính phản xạ Q1 ≤Q1

- tính bắc cầu: Q1 ≤Q2 , Q2 ≤Q3 suy ra Q1 ≤Q3

Gọi L là tập hợp các truy vấn, (L, ≤) là tập hợp có quan hệ thứ tự từng phần

(L, ≤) là một lưới vì mỗi truy vấn đều có truy vấn ở trên (truy vấn phụ thuộc vào nó) và truy vấn cao nhất (có mặt tất cả các chiều).

Phân cấp của chiều: Thông thường các chiều đều có sự phân cấp. Ví dụ: khách hàng phân theo huyện, tỉnh (vị trí địa lý) hay sản phẩm phân theo loại hình (may mặc, đồ uống, dụng cụ thể thao,…). Chúng ta sẽ kết hợp tính chất phân cấp vào lưới trên.

Quan hệ phụ thuộc của các truy vấn như thế sẽ được chia làm 2 kiểu: - Phụ thuộc do tương tác giữa các chiều (như ví dụ đã mô tả ở trên) - Phụ thuộc do phân cấp thuộc tính:

o Truy vấn doanh số bán hàng trên từng khách hàng sẽ suy ra được truy vấn doanh số khách hàng nhóm theo huyện, theo huyện sẽ được nhóm theo tỉnh. Mở rộng truy vấn (view) sẽ được ký hiệu bằng (a1,a2,a3,…,an) trong đó ai là 1 điểm trên hệ thống phân cấp của chiều thứ i.

Quan hệ phụ thuộc sẽ được ghi nhận lại như sau:

(a1,a2,..,an) ≤ (b1,b2,..,bn) nếu và chỉ nếu (ai) ≤ (bi) với mọi i. Với quan hệ trên ta cũng có một lưới tương ứng.

Ví dụ:

- khách hàng được phân cấp theo quốc tịch

Ta có sơ đồ lưới trên truy vấn như trên.

Mô hình chi phí tuyến tính: Để xác định được tập các view nào được tính trước là có lợi thì hẳn nhiên ta phải chỉ ra định lượng “lợi” như thế nào trong không gian nào. Dưới đây là một mô hình tuyến tính chi phí:

Với (L, ≤) là một lưới các truy vấn, để trả lời một truy vấn Q trên lưới chúng ta sử dụng truy vấn cha ông của Q trên lưới là Qa

đã được cài đặt vật lý. Sau đó chúng ta phải xử lý bảng tương ứng với Qa , như vậy thời gian để xử lý cho Q là một hàm theo đối số là kích thước của Qa , ở đây chúng ta chọn mô hình chi phí tuyến tính đơn giản:

- Chi phí để xử lý Q khi sử dụng Qa

là số hàng tương ứng với bảng Qa Theo thực nghiệm thì chúng ta có công thức sau

T=m*S + c , trong đó T là thời gian chạy trên 1 view có kích thước S, c là một số cố định và m là tỷ lệ của thời trian truy vấn với kích thước của view

Không gian chi phí:

Chi phí nhớ của một view là số dòng kết quả của view đó, ký hiệu là C(v). Tập S các view trong đó có view đỉnh, độ lợi của view v(nằm ngoài S) đối với S, ký hiệu B(v,S) được định nghĩa như sau:

- Với mỗi w  v, độ lợi Bw được xác định như sau

o Gọi u là view có chi phí thấp nhất trong S sao cho w  u. Chú ý rằng S chứa view đỉnh nên nên tồn tại u.

o Nếu C(v) <C(u) thì Bw=C(u)-C(v) ngược lại Bw=0 - B(v,S) được xác định theo công thức sau

B(v,S)=  Bw =  (C(u)-C(v))

Kích thước của view: theo các định nghĩa trên chúng ta nhận thấy có sự có mặt của kích thước các view trong việc chọn lựa cài đặt trước. Tất nhiên chúng ta không thể tính hết view rồi lấy kích thước được vì vậy các view được đưa ra xem xét dựa trên lấy mẫu dữ liệu từ dữ liệu thô (tức là một phần nhỏ của dữ liệu thô). Từ view đỉnh đã được tính toán trước và tính chất độc lập thống kê của các chiều trong các view (truy vấn) nên chúng ta có thể thực hiện được việc này.

6.2.3 Thuật toán ăn tham

Làm thế nào để chọn ra một tập bao gồm k (là số cho trước) các view mang lại độ lợi lớn nhất. Người ta đã chứng minh được rằng bài toán tối ưu này thuộc lớp bài toán NP- đầy đủ. Cài đặt một thuật toán mang lại tập tốt cũng là một cách làm thực tế. Trong đó đơn

giản nhất là thuật toán ăn tham.

Ví dụ:

//Output: k view có độ lợi lớn nhất S = {view đỉnh};

For I=1 to k do begin

select that view V không có trong S mà B(V,S) là lớn nhất; S=S union {V}; End; return S; a b c e d f g h 100 50 75 30 20 1 40 10

First Choice Second Choice Third Choice b 50X5=250 c 25X5=125 25X2=50 25X1=25 d 80X2=160 30X2=60 30X2=60 e 70X3=210 20X3=60 20+20+10=50 f 60X2=120 60+10=70 g 99X1=99 49X1=49 49X1=49 h 90X1=90 40X1=40 30X1=30

- „a‟ là view đỉnh là phần tử đầu tiên của tập S. Các view được tính từ a sẽ có chi phí là 100.

- tại vòng lặp thứ nhất:

o Nếu b được chọn thì các đỉnh b, d, e, g, h sẽ được tính với chi phí là 50, do đó độ lợi của b là 5 * (100-50)=250. Nếu c được chọn thì c, e, f, g, h sẽ được tính với chi phí là 75 do đó độ lợi của c là 5* (100-75)=125,…tương tự cho việc xét các đỉnh khác. Tại đây b có độ lợi lớn nhất, chọn b vào S

- Vòng lặp thứ 2 chọn „f‟ : tương tự như trên - Vòng lặp thứ 3 chọn d

Nếu chỉ a được cài đặt thì tổng chi phí là 800, còn nến (a,b,d,f) được cài đặt thì tổng chi phí là 420.

Nhận xét thuật toán:

- Như đã nói ở trên bài toán chọn S là một bài toán tối ưu thuộc lớp bài toán NP – đầy đủ, thuật toán ăn tham chỉ cố gắng đưa ra một tập S tốt.

- Độ tốt của thuật toán cũng rất phụ thuộc vào số phần tử mà chúng ta gán cho tập S - Thuật toán được xây dựng trên cơ sở mô hình chi phí tuyến tính. Hiện nay có nhiều

nghiên cứu trong đó có xây dựng các mô hình chi phí phức tạp hơn vì thế thuật toán được xây dựng trên đó cũng khác.

- Để đơn giản hóa, thuật toán cũng không xét đến sự có mặt của các cấu trúc chỉ mục của các view.

7 Mối quan hệ giữa dữ liệu tại các hệ thống OLTP với dữ liệu trên OLAP trên OLAP

Việc chuyển đổi dữ liệu OLTP sang dữ liệu OLAP trong kho lưu trữ được thực hiện thông qua các quy trình sau:

Hợp nhất dữ liệu: tất cả các dữ liệu liên quan tới các mục đặc trưng (sản phẩm, khách hàng, hay nhân viên) phải có khả năng hợp nhất từ nhiều hệ thống OLTP tới một hệ thống OLAP

đơn. Quy trình hợp nhất phải giải quyết được sự khác nhau về mã hoá giữa các hệ thống OLAP, phù hợp với các dữ liệu chung được sử dụng ở cả hai hệ thống có thể bằng cách so sánh các trường tương tự, có thể biến đổi dữ liệu lưu trữ từ nhiều loại dữ liệu khác nhau trong mỗi hệ thống OLTP thành một loại dữ liệu duy nhất được sử dụng trong hệ thống OLAP. Các hệ thống cung cấp các dữ liệu đầu vào cho một hệ thống OLAP không nhất thiết phải là các hệ thống OLTP truyền thống mà có thể được lưu trữ ở nhiều dạng hợp lệ, chẳng hạn như

các bản ghi Microsoft Excel trong một tệp được chia sẻ.

Quét dữ liệu: Việc hợp nhất dữ liệu OLTP vào một kho dữ liệu (data warehouse) tạo điều kiện quét dữ liệu. Một số hệ thống OLTP đánh vần các đề mục khác nhau, hoặc quá trình hợp nhất có thể gây ra các lỗi chính tả. Sự không thống nhất này phải được chỉnh sửa trước khi dữ liệu có thể được nhập vào kho lưu trữ phục vụ cho hệ thống OLAP.

Tập hợp dữ liệu: Trong khi dữ liệu OLTP ghi nhận tất cả các chi tiết của các giao tác thì OLAP chỉ truy vấn những dữ liệu tổng kết cần thiết, hoặc các dữ liệu được tập hợp bằng một số quy tắc nhất định. Ví dụ, một truy vấn lấy tổng doanh thu hàng tháng cho mỗi sản phẩm trong năm trước sẽ chạy nhanh hơn nếu cơ sở dữ liệu chỉ có các dòng tổng kết doanh thu hàng ngày (hoặc từng giờ) của mỗi sản phẩm, so với truy vấn phải quét tất cả các bản ghi chi tiết trong vòng 1 năm. Mức độ tập hợp dữ liệu trong kho lưu trữ phụ thuộc vào số lượng các yếu tố thiết kế (giống như lập trình hướng đối tượng).

Sắp xếp dữ liệu: Khi dữ liệu OLTP được chuyển vào kho lưu trữ, chúng sẽ phải được biến đổi theo cách sắp xếp hợp lý hơn đối với nhu cầu phân tích nhằm đưa ra quyết định và hạn chế tiêu phí thời gian. Quá trình thiết lập kho lưu trữ bao gồm cả việc sắp xếp lại dữ liệu OLTP, lưu trong các bảng biểu liên kết, thành dữ liệu OLAP được lưu trong các khối đa

chiều. Dữ liệu sau đó được tải vào kho lưu trữ.

Truy cập và phân tích dữ liệu: Khi dữ liệu đã được tải vào kho lưu trữ, OLAP cung cấp khả

Một phần của tài liệu Data warehouse lý thuyết và thực tiễn (Trang 70)

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

(126 trang)