Thuật ngữ OLAP và cơ sở dữ liệu đa chiều hay được đồng nhất với nhau, gây nên sự mập mờ xung quanh hai khái niệm này. Bản chất của cơ sở dữ liệu đa chiều là một kiến trúc cơ sở dữ liệu lưu giữ thông tin tổng hợp bao gồm tất cả các mục dữ liệu chính (hay các chiều) tham chiếu lẫn nhau. Còn bản chất cốt lõi của OLAP là dữ liệu được lấy ra từ DW hoặc DM sau đó được chuyển thành mô hình đa chiều và được lưu trữ trong một kho dữ liệu đa chiều (dữ liệu được lưu trữ theo mảng thay vì bản ghi như mô hình quan hệ). Công cụ OLAP lấy dữ liệu trong kho dữ liệu để thực hiện các công việc phân tích đặc biệt theo nhiều chiều và phức tạp hỗ trợ cho việc ra quyết định.Như vậy, OLAP là một thể hiện mặt trước cho phép người sử dụng đầu cuối lựa chọn các chiều và các sự kiện tham chiếu lẫn nhau. Các nguồn dữ liệu cho một ứng dụng OLAP bao gồm cơ sở dữ liệu đa chiều, cơ sở dữ liệu quan hệ và các dữ liệu bảng tính (lấy từ một kiến trúc CSDL bất kỳ). Nhưng vì kho dữ liệu đa chiều và các dịch vụ của OLAP thường được kết hợp với nhau nên mới có sự đồng nhất giữa 2 thuật ngữ trên.Từ đó nổi lên vấn đề cần quan tâm là: kho dữ liệu đa chiều và các dịch vụ của OLAP kết hợp với nhau như thế nào để đạt được những yêu cầu đa chiều của người sử dụng ? Hay đó chính là vấn đề lưu trữ trong OLAP.Với mong muốn biết rõ thêm về cách lưu trữ trong OLAP nên trong tiểu luận của mình, nhóm 5 xin trình bày một số tìm hiểu về: 1. Cách tổ chức hiệu quả đối với mảng đa chiều lớn2. Lưu trữ tích hợp dữ liệu cho truy vấn đa chiều3. Sự sắp xếp lại giá trị thuộc tính đối với hiệu quả của HOLAP4. DROLAP Một hướng tiếp cận dựa trên miền đặc đối với OLTPNhóm 5 xin chân thành cảm ơn sự hướng dẫn, giảng dạy tận tình của TS Trần Thanh Bình. Chắc chắn tiểu luận còn đơn giản và không tránh khỏi những sai sót, rất mong được sự chỉ bảo, góp ý của Thầy và các bạn để phần trình bày của nhóm 5 được hoàn chỉnh hơn.
Trang 1LỜI MỞ ĐẦU
Thuật ngữ OLAP và cơ sở dữ liệu đa chiều hay được đồng nhất với nhau, gây nên sự mập mờ xung quanh hai khái niệm này Bản chất của cơ sở dữ liệu đa chiều là một kiến trúc cơ sở dữ liệu lưu giữ thông tin tổng hợp bao gồm tất cả các mục dữ liệu chính (hay các chiều) tham chiếu lẫn nhau Còn bản chất cốt lõi của OLAP là dữ liệu được lấy ra từ DW hoặc DM sau đó được chuyển thành mô hình
đa chiều và được lưu trữ trong một kho dữ liệu đa chiều (dữ liệu được lưu trữ theo mảng thay vì bản ghi như mô hình quan hệ) Công cụ OLAP lấy dữ liệu trong kho
dữ liệu để thực hiện các công việc phân tích đặc biệt theo nhiều chiều và phức tạp
hỗ trợ cho việc ra quyết định
Như vậy, OLAP là một thể hiện mặt trước cho phép người sử dụng đầu cuối lựa chọn các chiều và các sự kiện tham chiếu lẫn nhau Các nguồn dữ liệu cho một ứng dụng OLAP bao gồm cơ sở dữ liệu đa chiều, cơ sở dữ liệu quan hệ và các dữ liệu bảng tính (lấy từ một kiến trúc CSDL bất kỳ) Nhưng vì kho dữ liệu đa chiều
và các dịch vụ của OLAP thường được kết hợp với nhau nên mới có sự đồng nhất giữa 2 thuật ngữ trên
Từ đó nổi lên vấn đề cần quan tâm là: kho dữ liệu đa chiều và các dịch vụ của OLAP kết hợp với nhau như thế nào để đạt được những yêu cầu đa chiều của người sử dụng ? Hay đó chính là "vấn đề lưu trữ trong OLAP"
Với mong muốn biết rõ thêm về cách lưu trữ trong OLAP nên trong tiểu luận của mình, nhóm 5 xin trình bày một số tìm hiểu về:
1 Cách tổ chức hiệu quả đối với mảng đa chiều lớn
2 Lưu trữ tích hợp dữ liệu cho truy vấn đa chiều
3 Sự sắp xếp lại giá trị thuộc tính đối với hiệu quả của HOLAP
4 DROLAP - Một hướng tiếp cận dựa trên miền đặc đối với OLTP
Nhóm 5 xin chân thành cảm ơn sự hướng dẫn, giảng dạy tận tình của TS Trần Thanh Bình Chắc chắn tiểu luận còn đơn giản và không tránh khỏi những sai sót, rất mong được sự chỉ bảo, góp ý của Thầy và các bạn để phần trình bày của nhóm 5 được hoàn chỉnh hơn
Trang 2NỘI DUNG
I CÁCH TỔ CHỨC HIỆU QUẢ CỦA MẢNG ĐA CHIỀU LỚN
Các ứng dụng khoa học và kỹ thuật thường sử dụng các mảng đa chiều lớn Phương pháp thông thường của việc lưu trữ một mảng đa chiều là định vị tuyến tính vì vậy mảng được bố trí một cách tuyến tính bằng một tổ hợp đường ngang của các trục trong trật tự định trước Chiến lược này (bắt chước cách mà Fortran lưu trữ các mảng trong bộ nhớ chính) có thể dẫn đến các kết quả tai hại trên bộ nhớ thứ hai hoặc thứ ba Vì thế tối ưu hóa việc định vị mảng là một yêu cầu cấp thiết cho lưu trữ trong các mảng đa chiều lớn
1 Vấn đề lưu trữ của các mảng
Chúng tôi bắt đầu phần này bằng việc trình bày mô hình mẫu truy cập mà chúng tôi sử dụng để tối ưu hóa sự xếp đặt (bố trí) mảng Sau đó, chúng tôi mô tả một trong bốn chiến lược tổ chức mảng và phác
họa một thuật toán có thể được sử dụng để thi
hành nó trong một DBMS
Xét một mảng n chiều Chúng tôi mô hình
hóa mỗi yêu cầu truy cập của người sử dụng như
là một hình chữ nhất n chiều định vị một nơi nào
đó trong phạm vi mảng Hơn thế nữa, chúng tôi
{(Pi, Ai1,Ai2,….,Ain) : 1 ≤ i ≤ K}
Trang 3Hình 1 minh họa một ví dụ trên một mảng 10 x 10 Ba hình chữ nhật tô đậm
(mỗi truy cập với khả năng 1/3) miêu tả việc truy cập vào hai lớp tương ứng với mẫu truy cập sau:
Mẫu truy cập đó có thể được cung cấp bởi người sử dụng đầu cuối hoặc được xác định bởi ví dụ thống kê các truy cập mảng trong một hệ thống quản lí cơ sở dữ liệu
1.1 Cắt khúc
Thay vì sử dụng cách định vị tuyến tính kiểu FORTRAN, chúng ta có thể phân tích mảng thành các khúc đa chiều, mỗi kích cỡ của một khối lưu trữ block A
là đơn vị chuyển giao sử dụng bởi hệ thống tệp trong việc di chuyển dữ liệu từ thiết
bị lưu trữ này đến thiết bị lưu trữ khác Hình dáng của các khúc đó được chọn để cực tiểu hóa số khối trung bình tìm nạp cho một mẫu truy cập được đưa ra Để minh họa ý nghĩa của việc cắt khúc chúng tôi xét ví dụ như hình 2 Hình 2(a) biểu diễn một mảng 3 chiều có kích cỡ X1 = 100, X2 = 2000 và X3 = 8000 sử dụng cách lưu trữ định vị tuyến tính và hình 2(b) minh họa cách lưu trữ tương tự sử dụng sự biểu diễn cắt khúc Giả sử mảng được lưu trữ trên một đĩa từ và dữ liệu chuyển giao giữa bộ nhớ chính và đĩa khoảng 8Kb (trong ví dụ này giả sử rằng 8kb = 8000bytes)
Trang 4Cho mẫu truy cập đối với mảng này là {(0.5, 10, 400, 10), (0.5, 20, 5, 400)} Nếu mảng được lưu trữ tuyến tính với X3 được xem như là trục trong cùng (as the innermost axis) theo sau bởi X2 và kế tiếp là X1, như biểu diễn trong hình 2(a), sau
đó mỗi khối đĩa sẽ nắm giữ chỉ một dòng các giá trị dọc theo X3 Truy cập đầu tiên
sẽ tìm nạp một tổng 10 x 400 x 1 = 4000 khối, và truy cập thứ hai sẽ tìm nạp 20 x 5
x 1 = 100 khối Do đó, mẫu truy cập này tìm nạp trung bình 4000 x 0.5 + 100 x 0.5
= 2050 khối Vì vậy, trung bình số byte yêu cầu có thể vừa khớp 5 khối, số lượng
dữ liệu tìm nạp là gấp 410 lần lượng dữ liệu thực tế được sử dụng
Giả sử chúng ta chia mảng thành các khúc 8Kb Hình dạng của mỗi khúc là một hình khối (20,20,20) như hình 2(b) Với mỗi mẫu truy cập giống nhau, số khối tìm nạp là 1 x 20 x 1 đối với lần truy cập đầu tiên và 1 x 1 x 20 đối với lần truy cập thứ hai, cho rằng điểm bắt đầu của hình chữ nhật truy cập sắp hoàn toàn thẳng hàng với điểm bắt đầu của một khúc Số khối trung bình tìm nạp là 20 x 0.5 + 20 x 0.5 =
20 trong khi đối với các mảng không cắt khúc là 2050 Như vậy, kết quả cắt khúc làm giảm hơn 100 lần số khối tìm nạp Nhằm thực hiện sự cải tiến đó, chúng tôi cần một cách để tối ưu hóa hình dạng của một khúc
Bây giờ chúng tôi trình bày một định nghĩa chính xác của bài toán Cho một mảng n chiều [X1, X2,….,Xn] trong đó Xi là chiều dài trục thứ i của mảng, kích cỡ khối C và một mẫu truy cập {(Pi, Ai1, Ai2,….,Ain): 1 ≤ i ≤ K}, mục đích là tìm hình dạng của các khúc mà mảng bị phân tách sao số khối trung bình tìm nạp là nhỏ nhất Hình dạng của các khúc đó được chỉ định bởi một Tuple (c1,c2,…,cn) trong đó ci là chiều dài của trục thứ i của các khúc đa chiều Kích cỡ của các khúc nhập vào theo sự ràng buộc sau trên mỗi ci:
Số khối trung bình tìm nạp đối với một mẫu truy cập theo lý thuyết và hình
Trang 5Mục tiêu là chọn hình dạng khúc cắt thõa mãn sự ràng buộc và làm cho (1) cực tiểu.
Sự hiện diện của hàm trần trong (1) làm cho giải pháp hình thức khép kín khó khăn Một cách khác có thể luôn luôn tìm thấy giải pháp tối ưu bằng cách tìm kiếm hết mọi khía cạnh của tất cả các hình dạng có thể mà thõa mãn sự ràng buộc kích cỡ Trong trường hợp này, số lượng hình dạng phát sinh là theo luật số mũ theo chiều của mảng Các phương pháp (kỹ thuật) khác có thể được sử dụng để hạn chế bớt không gian tìm kiếm Ví dụ:
* Thay vì xét tất cả các hình dạng có thể, chúng ta chỉ tạo ra các hình dạng lớn nhất Một hình dạng là lớn nhất khi tăng chiều dài của bất cứ cạnh nào của hình
đó sẽ vi phạm đến sự ràng buộc về kích thước Ví dụ, nếu C = 15 và n = 2 thì hình dạng (5,3) là cực đại trong khi (4,3) và (5,2) thì không
* Thay vì xem xét tất cả các hình dạng có thể, trước tiên chúng ta tạo ra một giải pháp gấn tối ưu nhất bằng cách chỉ xem xét các hình dạng có chiều dài mỗi cạnh là lũy thừa 2 Sau đó, giải pháp này được cải tiến bằng cách xét các hình dạng khác trong “vùng lận cận” với hình dạng đã xét Vùng lận cận bao gồm các cạnh biến đổi từ một nữa đến gấp đôi cạnh tương ứng trong giải pháp gần tối ưu
1.2 Sắp xếp lại thứ tự
Một lần mảng bị cắt khúc, chúng ta cần đến một phương pháp tốt để bố trí các khúc cắt trên đĩa Cách tự nhiên là bố trí các khúc bằng cách quay ngang mảng
bị cắt khúc theo thứ tự trục Do đó, thứ tự các trục khác nhau sẽ dẫn đến việc bố trí khúc khác nhau Lần tìm nạp các khối cho một hình chữ nhật yêu cầu có thể được giảm bằng cách chọn thứ tự trục bên phải Bây giờ chúng ta xuất phát từ một công thức đơn giản để tìm một thứ tự tốt của các trục của mảng sao cho khoảng cách tìm kiếm trung bình để lấy thông tin từ một hình chữ nhật trung bình trong mẫu truy cập giảm xuống Chúng ta cho rằng các khối của mảng được sắp đặt (bố trí) kề nhau trên đĩa và một cylinder (một đơn vị lưu trữ bao gồm một tập các rãnh ghi chiếm cùng vị trí) được sử dụng hoàn toàn trước khi định vị dữ liệu trên cylinder kế
Trang 6tiếp Việc phân tích dưới đây chỉ có liên quan nếu đĩa được sử dụng riêng cho sự phục hồi mảng dữ liệu (retrievals on the array data).
Bổ đề 2: Cho một mẫu truy cập, giá trị của biểu thức (2) tính toán mức trung
bình trên tất cả các phần tử của mẫu truy cập là cực tiểu đối với thứ tự 1,2,…,n (với
n là trục trong cùng) nếu
Để minh họa sự thuận lợi của việc xếp lại thứ tự các trục của mảng ta xét ví
dụ như hình 2(b) Giả sử số khối của một cylinder là 60 Khi đó với mẫu truy cập cho như hình 2 thì số rãnh trung bình tìm kiếm (theo bổ đề 1) là 67 đối với thứ tự các trục của mảng là (X1, X2, X3) Sử dụng bổ đề 2, nếu chúng ta đổi lại thứ tự các trục là (X1, X3, X2) thì số rãnh tìm kiếm giảm xuống là 17
1.3 Sự dư thừa
Bố trí dữ liệu sử dụng một kích cỡ khúc làm giảm đến mức tối thiểu chi phí truy cập trung bình, nghĩa là nó có hiệu quả đối với một vài hình chữ nhật nhưng không hiệu quả đối với các hình khác Chúng tôi đề xuất việc duy trì các bản sao
dư thừa của mảng mà các bản sao này được tổ chức theo một cách khác để tối ưu
Trang 7các lớp khác nhau trong mẫu truy cập Cụ thể, chúng ta chia các lớp trong mẫu truy cập thành nhiều phân vùng (partition - một phần của khu vực lưu trữ trên đĩa cứng) như số bản sao đã đề xuất và tối ưu mỗi bản sao cho phân vùng kết hợp của
nó (tức là tạo ra mối liên kết giữa bản sao và phân vùng) Do đó, bước đầu tiên là tìm R phân vùng, trong đó R là số bản sao thõa thời gian truy cập lũy tích (cumulative access time) đối với các truy vấn trong các lớp của mẫu truy cập được cực tiểu Chúng ta có thể làm điều này bằng cách sử dụng một trong hai hướng tiếp cận sau:
* Sử dụng brute force để thử tất cả các phân vùng có thể và chọn ra phần
vùng tốt nhất Trong trường hợp xấu nhất, số phân vùng được xét là thuộc số mũ theo số phần tử trong mẫu truy cập
* Sử dụng các phương pháp (kỹ thuật) nhóm vector để nhóm các lớp thành các cluster Chúng ta có một tập hợp bắt đầu K lớp và muốn chia chúng thành R cluster Ban đầu, mỗi lớp thuộc về một cluster khác nhau và chúng ta dần dần trộn một cặp các cluster với khoảng cách có trọng số tối thiểu giữa chúng cho đến khi còn lại R clusters
Khi một yêu cầu đọc đến một mảng sao thì hệ thống thực hiện theo thời gian trước tiên sẽ tìm mảng sao (sao chép) với chi phí truy cập ước lượng nhỏ nhất Chi phí ước lượng là tổng trọng số của số khối tìm nạp, khoảng cách tìm kiếm và các chuyển đổi giữa các phương tiện truyền thông (trong trường hợp các thiết bị thứ ba) Sau đó chi phí bản sao tối thiểu được dùng để trả lời các truy vấn
1.4 Phân chia
Thiết bị nhớ thứ ba là các hệ thống lưu trữ robo-line gồm có một số lượng lớn phương tiện truyền thông (các băng từ và đĩa) và một vài ổ đĩa đọc-ghi Một đầu đọc (robot arm) chuyển đổi phương tiện (media) giữa các ngăn xếp (shelves)
và ổ đĩa trong mười giây Để cải tiến sự thực hiện số lần chuyển đổi giữa các phương tiện được yêu cầu để truy cập thì hình chữ nhật yêu cầu nên được làm nhỏ
đi Mảng nên được phân chia sao cho các phần của mảng thường xuyên bị truy cập
Trang 8cùng nhau nằm trên cùng phương tiện Chúng ta có thể mở rộng phương pháp cắt khúc để xử lý việc chuyển đổi phương tiện bằng cách:
* Xây dựng kích cỡ khúc cắt (chunk) của một đĩa thay vì một khối đĩa (disk block)
* Cực tiểu hóa số lượng đĩa chuyển đổi đĩa thay vì số lượng trang tìm nạp (number of page fetches)
Việc phân chia có thể được sử dụng để cực tiểu hóa sự chuyển đổi các phương tiện cho cả đĩa lẫn các thiết bị băng từ Tuy nhiên, đối với băng từ thời gian tìm kiếm trung bình (45 giây) là lớn so với thời gian chuyển đổi Do đó, cực tiểu hóa sự chuyển đổi giữa các phương tiện là ít quyết định (crucial) hơn cực tiểu hóa thời gian tìm kiếm
II LƯU TRỮ TÍCH HỢP CHO TRUY VẤN ĐA CHIỀU
Hệ thống OLAP là một hệ thống hỗ trợ những công cụ phân tích xử lý dữ liệu đa chiều Ngày nay một vấn đề đặt ra đối với công nghệ kho dữ liệu là giải quyết được sự mẫu thuẫn giữa việc càng ngày các truy vấn càng phức tạp, với nhiều đòi hỏi cấp bậc cao với việc không ngừng nâng cao, cải tiến tốc độ trả lời truy vấn, tích hợp dữ liệu Một trong những phương pháp giải quyết vấn đề đó, chúng ta tìm hiểu về ứng dụng cache hoạt động (Active cache)
1 Chunk-based caching:
Chunk-based caching là lý thuyết nâng cao hiệu quả xử lý dữ liệu OLAP đa chiều, trong đó các chiều được tổ chức thành những không gian đa chiều (multi-dimension space) và các dữ liệu tham chiếu vào những không gian đó Với mỗi chiều (dữ liệu) thì những giá trị phân biệt khác nhau thì được phân vào các vùng riêng biệt, do đó không gian đa chiều cũng phân thành từng chunk (khúc dữ liệu) Hình 1: chiều Sản phẩm và Thời gian được tổ chức vào một không gian đa chiều
Trong mô hình (lược đồ) chunk-based caching thì những kết quả truy vấn mà chứa trong cache được nằm trong các chunk và các chunk này chịu sự quản lý của cache Và khi có một truy vấn thì nhiệm vụ của cache là xác định và dò ra chunk
Trang 9lưu kết quả truy vấn đó Với phương thức đó, thì danh sách chỉ mục chunk gồm 2 phần, một phần chứa những trả lời truy vấn đã nạp vào cache, phần hai là những chunk còn thiếu (chưa nạp vào cache), và để hoàn thiện việc trả lời truy vấn thì những chunk còn thiếu này được nạp bằng những truy vấn lựa chọn SQL (selection SQL) từ backend.
2 Tích hợp trong cache:
Trong một mô hình đa chiều, có nhiều cấp bậc tích hợp khác nhau, mỗi cấp bậc tương ứng với hoạt động group-by khác nhau Các group-by này được tổ chức
dưới dạng mạng lưới mà nối với nhau bằng các mối quan hệ “có thể xử lý bằng”
Với bất kỳ group-by nào thì có rất nhiều mối quan hệ đó
Một cách tổng quát, một group-by (x 1 , y 1 , z 1 ) có thể xử lý bởi group-by (x 2 ,
y 2 , z 2 ) nếu x 1≤x 2 , y 1≤y 2 và z 1≤z 2 thì xét ví dụ sau: group-by (0,2,0) có thể xử lý bằng (0,2,1) hoặc (1,2,0)
Khi chúng ta sử dụng chunk-based caching thì vấn đề đã nảy sinh những phức tạp khó khăn hơn nhiều Vói tính chất đóng kín nên sự tương ứng giữa chunk với các cấp bậc tích hợp là khá đơn sơ Ví dụ chunk ở cấp bậc (0,2,0) có thể xem là chunk 0 sẽ ánh xạ đến một tập hợp chunk cấp bậc (1,2,0) mà ta gọi là các chunk 0
và 1 Để xử lý chunk 0 (0,2,0) từ (1,2,0), chúng ta cần các chunk 0 và 1 (1,2,0) Điều đó có lẻ xảy ra chỉ với chunk 0 (1,2,0) lưu trong cache trong khi chunk 1 thì được xử lý thông qua các chunk khác, và điều này có nghĩa là chỉ có chunk 0 là được xử lý tại cache Do đó, để biết được một chunk có phải được xử tại cache hay không, thì ta phải dò hết các mối quan hệ liên quan đến chunk đó trong mạng lưới
từ group-by chứa chunk đó đến group-by nền Hình 3 chỉ ra rằng có nhiều cách khác nhau để xử lý chunk (0,2,0) từ mạng lưới, đây cũng là một ví dụ của việc dùng phương pháp thông thường để xử lý chunk tại cache
3 Phương pháp tìm kiếm vét cạn:
Phương pháp tìm kiếm vét cạn (ESM) là một phương pháp tìm kiếm thông thường đối với những chunk được xử lý từ cache Nếu chunk là thuộc vào chunk
Trang 10còn thiếu, thì nó sẽ được tìm kiếm theo các đường dẫn đến group-by nền để nạp chunk đó vào xử lý tại cache Ta có thuật toán như sau:
Bổ đề 1: Cho một lược đồ n chiều, h i là bậc kích thước của chiều i Giả sử
(l 1, l 2, l 3 l n ) là cấp bậc của một group-by, thì ta có (0,0,0 ) là cấp bậc tích hợp và (h 1, h 2, h 3 h n ) là cấp bậc nền Khi đó số đường dẫn trong mạng lưới từ một cấp bậc
group-by bất kỳ đến group-by nền được tính theo công thức:
4 Phương pháp dựa trên bộ đếm ảo:
Phương pháp dựa trên bộ đếm ảo (VCM) là một cải tiến của phương pháp thông thường (ESM), xuất phát từ hai ý tưởng:
1 Do cấu trúc mạng lưới nên khi ESM tìm kiếm theo các đường dẫn khác nhau thì sẽ có các đỉnh được thăm nhiều lần
2 Có quá nhiều truy vấn về một chunk theo nghĩa đó thì ta có thể dùng chỉ mục trạng thái của cache như một siêu thông tin về mỗi chunk
Ví dụ 3:
Trang 11Theo thuật toán ESM, tìm kiếm từ chunk 0 bậc (0,0) đến (1,1) thì có thể đi theo hai đường, nhưng cả hai đường này cuối cùng đều phải duyệt qua các chunk 0,1,2,3 tại bậc (1,1) Nó không tận dụng kết quả đã có được, và đây là một sự lãng phí về thời gian.
Theo cách tiếp cận VCM, thì VCM sẽ duy trì bộ đếm mỗi chunk tại mỗi bậc group-by Một chunk có thể được lưu ở cache hoặc có thể truy vấn thông qua đường dẫn trên mạng lưới Bộ đếm ảo cho một chunk được định nghĩa như sau:
Định nghĩa 1: (Bộ đếm ảo) Bộ đếm ảo cho một chunk số các nút cha của
nút mà được tìm thấy thành công trên một tuyến đường dẫn của mạng lưới Bộ đếm
sẽ tăng lên 1 nếu chunk được tìm ra nạp vào cache và được xử lý
Hệ quả: Chỉ khi nào chunk được xử lý tại cache thì bộ đếm ảo mới có giá trị
lớn hơn 0
Ví dụ 4: Xét lại sơ đồ ở Ví dụ 3 Ở bậc (1,1) có 4 chunk; bậc (1,0) và (0,1)
mỗi bậc có 2 chunk và bậc (0,0) chỉ có 1 chunk Hình 4 cho biết chunk nào đang hiện có ở cache và được bộ đếm lưu giữ bằng VCM Chunk 0 ở bậc (1,1) có bộ đếm là 1 vì nó đang hiện diện ở cache và chắc chắn được xử lý Chunk 1 ở bậc (1,1) không hiện diện ở cache và không được xử lý nên bộ đếm của nó là 0 Chunk
0 ở bậc (1,0) có bộ đếm của nó là 1 vì mặc dù nó không hiện diện ở cache nhưng
nó lại được xử lý thông qua việc tìm kiếm trên đường dẫn của mạng lưới,
Trang 12Ta có giải thuật dưới đây quy trình thực hiện theo VCM:
4.1 Việc duy trì bộ đếm
Việc duy trì bộ đếm ảo sẽ giúp cho quá trình tìm kiếm đảm bảo tức thời Tuy nhiên, điều này dẫn đến việc cần phải thêm thủ tục bổ sung khi chunk được chèn vào hoặc xóa ra khỏi cache do vậy bộ đếm lúc này cần phải tiến hành cập nhật Thuật toán dưới đây thực hiện việc cập nhật bộ đệm:
Trang 13Bổ đề 2: Giả sử rằng ta chèn một chunk bậc mới vào cache (l 1, l 2, l 3 l n ) Số
lượng bộ đếm cập nhật bằng n∗∏n i=1(l i+ 1)
Điểm đáng chú ý của thuật toán VCM là nó chỉ duy trì những thông tin vừa
đủ để xác định một chunk là được xử lý trong khi vẫn thực hiện việc cập nhật bộ đếm với chi phí rất nhỏ Độ phức tạp của một lần chèn phụ thuộc vào nội dung của cache Việc giảm độ phức tạp của tất cả các lần chèn chi phí sẽ thấp hơn rất nhiều nếu như ta chỉ tiến hành theo từng trường hợp Điều này là do những cập nhật chỉ được thông tin khi một chunk lần đầu xử lý Trạng thái lần đầu tiên xử lý này chỉ
có một lần, và chỉ thay đổi khi thực hiện việc xóa và có thể nó lại được cập nhật lại Tuy nhiên điều đó là điều ta không mong đợi Thông thường, một chunk được chèn thì quá trình cập nhật sẽ được thực hiện chỉ đối với bậc của chunk đó Khi một chunk bị đưa ra khỏi cache thì bộ đếm cũng phải được cập nhật
5 Phương pháp dựa vào chi phí:
Cả hai thuật toán ESM và VCM đều chỉ xác định được chỉ một đường dẫn để tìm và xử lý một chunk Cho một chi phí tuyến tính của việc tích hợp, thì chi phí cho việc xử lý một chunk tương đương với số lượng tuple (bậc) được tích hợp Như
ta đã biết để tìm và xử lý một chunk thì có nhiều đường dẫn trên mạng lưới để thực hiện, và mỗi đường có chi phí khác nhau Và với ý tưởng đó thì ta có thể cải tiến ESM hoặc VCM để tìm đường dẫn có chi phí thấp nhất
Ví dụ 5:
Theo hình 5 có hai đường dẫn để xử lý chunk 0 bậc (0,0), đường thứ nhất là tích hợp chunk 1 bậc (1,0) và chunk 0 và 2 bậc (1,1); đường thứ hai là tích hợp chunk 0 và 1 bậc (0,1) Chi phí tích hợp hai đường này là khác nhau do số lượng bậc tích hợp mỗi đường là khác nhau
Trang 14Hình 5: Chi phí tích họp khác nhau theo từng đường khác nhau
5.1 ESM dựa trên chi phí (ESMC):
Ta cải tiến thuật toán ESM thay vì kết thúc việc tìm kiếm ngay khi có đường dẫn đầu tiên thì ta tiếp tục tìm kiếm để có được đường dẫn có chi phí thấp nhất Độ phức tạp của ESMC trong từng trường hợp là tương đương ESM Tuy nhiên hao phí trung bình theo trường hợp là cao hơn
5.2 VCM dựa trên chi phí (VCMC):
VCMC tìm kiếm đường dẫn tốt nhất cho việc xử lý chunk bằng cách duy trì thông tin chi phí để thêm vào cho thông tin bộ đếm Với mỗi chunk được xử lý thì thông tin bộ đếm sẽ có chi phí của đường dẫn chi phí thấp nhất để xử lý và nút cha
đã duyệt qua mà có đường dẫn chi phí thấp nhất VCM và VCMC tương đồng nhau
cả về thuật toán lẫn thuật toán cập nhật, chỉ có điểm khác nhau duy nhất và quan trọng nhất đó là việc chuyển cập nhật của VCMC có hai trường hợp: trường hợp khi một chunk được xử lý lần đầu tiên và trường hợp chi phí thấp nhất xử lý một chunk thay đổi
Một lợi điểm khác của việc duy trì chi phí theo phương pháp VCMC là nó có thể cho kết quả chi phí thấp nhất của việc xử lý một chunk ngay lập tức mà không cần phải tiến hành tích hợp Điều này rất hữu ích cho việc tối ưu hóa dựa trên chi phí để có thể quyết định xem liệu tích hợp trong cache hay tiếp cận dữ liệu backend cái nào là tốt hơn
Trang 156 Nguyên tắc thay thế:
Trong một cache đơn giản, những chunks được tích họp ở mật độ cao hơn thì khi truy xuất cache (caching) thì nó sẽ có độ ưu tiên (benefit) cao hơn và trong quá trình thực hiện caching nó được ưu tiên cao hơn Trong việc tích hợp các lược đồ caching, việc gắn độ ưu tiên với một chunk là một điều khó khăn do bởi hai lý do sau:
1 Nhiều chunk khác nhau được dùng để trả lời các truy vấn ở cùng bậc, một chunk có thể được dùng để trả lời các truy vấn ở nhiều cấp độ tích hợp
2 Một chunk có thể được sử dụng để trả lời một truy vấn ở nhiều cấp độ tích hợp trên cơ sở các chunk khác hiện có trong cache Ta có thể làm được điều này là
vì một chunk được tích hợp ánh xạ đến một tập các chunk ở cấp độ chi tiết hơn mà nhờ chúng để xử lý chunk được tích hợp đó
Ví dụ 6:
Hình 6: Độ ưu tiênChunk 0 bậc (1,1) hình 6(a)có độ ưu tiên thấp hơn chunk 0 bậc (1,1) hình 6(b), điều này là do chunk sự có mặt của chunk 1 bậc (1,1) hình 6(b) đã làm cho độ
ưu tiên của cả hai chunk 0 và 1 này cao hơn
6.1 Xử lý độ ưu tiên:
Độ ưu tiên của chunk được xử lý tươi phụ thuộc vào cách thức xử lý:
Trang 161 Chunk được xử lý cache: là chunk được xử lý bởi hoạt động tích hợp các
chunk được xử lý cache Khi đó độ ưu tiên của nó tính bằng chi phí tích hợp
2 Chunk Backend: là chunk được xử lý tại backend, độ ưu tiên của nó là
tổng hợp chi phí kết nối tới backend, chi phí sản sinh truy vấn và nạp kết quả truy vấn Những chunk được xử lý tại backend trong quá trình caching sẽ được đánh giá cao hơn chunk được xử lý từ những chunk khác hiện có trong cache, do đó tổng chi phí của việc nạp kết quả truy vấn từ backend là rất cao
6.2 Tổ chức nhóm của chunk
Trong việc thực hiện nguyên tắc thay thế tối ưu thì ta nên tổ chức nhóm bao gồm những chunk hữu ích vì các nhóm như vậy sẽ có được độ ưu tiên của các chunk trong nhóm cao hơn như ở ví dụ 6 Tuy nhiên thực hiện được điều này là việc không hề đơn giản, do đó nó chỉ có ý nghĩa trong việc ước đoán chunk sẽ được nạp vào cache để xử lý Ta vẫn có thể giải quyết được vấn đề trên bằng cách tiền
xử lý hoàn toàn các group-by và nạp vào cache Do toàn bộ chunk ở group-by đều được nạp vào cache nên ta có thể dùng để xử lý mọi chunk ở cấp độ tích hợp cao hơn Như vậy quá trình tiền xử lý group-by là quá trình lấy thông tin nhóm chunk hữu ích
6.3 Nguyên tắc hai cấp bậc
Chúng ta để xuất các nguyên tắc sau trên cơ sở trực quan nghiên cứu:
- Các chunk backend do có độ ưu tiên cao hơn nên có thể dùng thay thế chunk được xử lý cache Ta chỉ có thể thực hiện việc thay thế này trong mỗi nhóm theo nguyên tắc độ ưu tiên chuẩn (những chunk được tích hợp cao hơn thì sẽ có độ
ưu tiên cao hơn)
- Khi một nhóm chunk được dùng để xử lý nhóm chunk khác, thì giá trị khóa (ta xấp xỉ LRU bằng KHÓA) của toàn bộ chunk trong nhóm được tăng lên một lượng bằng độ ưu tiên của những chunk đã được tích hợp Vì lý do này nên ta phải luôn duy trì các nhóm chunk tích hợp hữu ích trong cache