Tóm tắt. Mục tiêu của việc xử lí truy vấn cơ sở dữ liệu phân tán là tìm một chiến lược
thực thi các truy vấn một cách hợp lí nhằm tối thiểu hóa giá trị hàm chi phí. Chi phí được
tính toán ở đây là chi phí theo thao tác xuất/nhập, chi phí CPU và chi phí giao tiếp, trong
đó chi phí giao tiếp thông thường là chi phí lớn nhất. Xử lí truy vấn trong các hệ Cơ sở dữ
liệu hướng đối tượng sẽ nảy sinh nhiều vấn đề phức tạp hơn do các đặc tính của hướng đối
tượng, đó là tính đóng gói, kế thừa, phân cấp lớp. Bài báo này trình bày một thuật toán sử
dụng bộ lọc Bloom với mục tiêu giảm chi phí giao tiếp trong quá trình thực hiện truy vấn
cơ sở dữ liệu hướng đối tượng phân tán.
8 trang |
Chia sẻ: thanhle95 | Lượt xem: 221 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Xử lí truy vấn trong cơ sở dữ liệu hướng đối tượng phân tán sử dụng bộ lọc Bloom, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
JOURNAL OF SCIENCE OF HNUE DOI: 10.18173/2354-1075.2015-0067
Educational Sci., 2015, Vol. 60, No. 7A, pp. 196-203
This paper is available online at
XỬ LÍ TRUY VẤN TRONG CƠ SỞ DỮ LIỆU HƯỚNG ĐỐI TƯỢNG PHÂN TÁN
SỬ DỤNG BỘ LỌC BLOOM
Mai Thúy Nga1, Đoàn Văn Ban2, Nguyễn Mạnh Hùng3
1Khoa Toán Tin, Trường Đại học Thăng Long, 2Viện Công nghệ Thông tin
3Học viện Kỹ thuật Quân sự
Tóm tắt. Mục tiêu của việc xử lí truy vấn cơ sở dữ liệu phân tán là tìm một chiến lược
thực thi các truy vấn một cách hợp lí nhằm tối thiểu hóa giá trị hàm chi phí. Chi phí được
tính toán ở đây là chi phí theo thao tác xuất/nhập, chi phí CPU và chi phí giao tiếp, trong
đó chi phí giao tiếp thông thường là chi phí lớn nhất. Xử lí truy vấn trong các hệ Cơ sở dữ
liệu hướng đối tượng sẽ nảy sinh nhiều vấn đề phức tạp hơn do các đặc tính của hướng đối
tượng, đó là tính đóng gói, kế thừa, phân cấp lớp. Bài báo này trình bày một thuật toán sử
dụng bộ lọc Bloom với mục tiêu giảm chi phí giao tiếp trong quá trình thực hiện truy vấn
cơ sở dữ liệu hướng đối tượng phân tán.
Từ khóa: Cơ sở dữ liệu hướng đối tượng, cơ sở dữ liệu phân tán, xử lí truy vấn, bộ lọc
Bloom..
1. Mở đầu
Nhiều kết quả nghiên cứu [1, 2, 3] chỉ ra rằng cơ sở dữ liệu hướng đối tượng (CSDL HĐT)
có thể được áp dụng với quy mô lớn và trong nhiều lĩnh vực ứng dụng phức tạp. Mô hình CSDL
hướng đối tượng được tạo ra cũng nhằm để tích hợp trực tiếp với các ngôn ngữ lập trình hướng
đối tượng, ngôn ngữ mà ngày nay được sử dụng trong phần lớn các ứng dụng. Hiện nay đã tồn
tại một số hệ quản trị CSDL hướng đối tượng như GEMSTONE, Versant, ObjectStore, Orion,
OpenOODB, IRIS,. . . Đặc điểm cơ bản của CSDL hướng đối tượng là sự đóng gói các thuộc tính
của đối tượng và các thao tác lên đối tượng này.
CSDL HĐT được phát triển trong môi trường mạng tạo thành mô hình cơ sở dữ liệu hướng
đối tượng phân tán (CSDL HĐT PT). Trong CSDL HĐT PT, dữ liệu được phân bố trên một số
trạm của mạng máy tính, các ứng dụng sẽ phải truy cập, xử lí dữ liệu tại các trạm khác nhau. Với
các đặc trưng cơ bản của công nghệ hướng đối tượng như tính đóng gói, kế thừa, phân cấp lớp, vấn
đề xử lí truy vấn trong CSDL HĐT PT phức tạp hơn nhiều so với các hệ thống cơ sở dữ liệu quan
hệ. Một số kết quả nghiên cứu về xử lí truy vấn trong CSDL HĐT PT như trong [4, 5].
Để tối ưu hoá truy vấn phân tán thì phải hạn chế chi phí truyền tải dữ liệu giữa các trạm vì
chi phí này thông thường là chi phí khá lớn. Có nhiều thuật toán lọc để hạn chế dữ liệu truyền trong
đó có cơ chế lọc của bộ lọc Bloom [6]. Sử dụng bộ lọc Bloom để xử lí truy vấn phân tán trong các
hệ thống cơ sở dữ liệu quan hệ đã được đề cập trong các bài báo [7, 8]. Trong báo cáo này chúng
tôi thảo luận về việc sử dụng bộ lọc Bloom để xử lí truy vấn có biểu thức đường dẫn trong CSDL
HĐT PT nhằm mục đích giảm thiểu các chi phí truyền dữ liệu phân tán.
Ngày nhận bài: 15/7/2015. Ngày nhận đăng: 10/11/2015.
Liên hệ: Mai Thúy Nga, e-mail: ngamt@thanglong.edu.vn
196
Xử lí truy vấn trong cơ sở dữ liệu hướng đối tượng phân tán sử dụng bộ lọc Bloom
2. Nội dung nghiên cứu
2.1. Cơ sở dữ liệu hướng đối tượng phân tán và biểu thức đường dẫn
2.1.1. Cơ sở dữ liệu hướng đối tượng phân tán
Khái niệm cơ bản nhất trong CSDL HĐT là đối tượng (object). Đối tượng biểu diễn một
thực thể có thực trong hệ thống đang được mô hình hóa. Khác với đối tượng trong ngôn ngữ lập
trình hướng đối tượng chỉ tồn tại trong thời gian chương trình hoạt động, các đối tượng trong CSDL
HĐT mang tính bền vững, được bảo toàn và được chia sẻ với nhiều chương trình, nhiều ứng dụng
khác nhau. Mỗi đối tượng có một định danh duy nhất được tạo ra bởi hệ thống. Các đối tượng là
thể hiện của lớp, hay một lớp là khuôn mẫu để tạo ra các đối tượng. Phân cấp lớp được định nghĩa
để chỉ ra mối quan hệ giữa các lớp khác nhau.
Lớp là cấu trúc đóng gói các thuộc tính mô tả các đặc trưng, tính chất của đối tượng và
các phương thức (hàm) mô tả các hành vi ứng xử của các đối tượng. Các thuộc tính trong một lớp
được chia thành hai loại: đơn giản và phức hợp. Thuộc tính đơn giản là thuộc tính có miền giá
trị là các kiểu nguyên thủy như int, long, float, double, boolean, char, string . . . Thuộc tính phức
hợp là thuộc tính có miền giá trị không phải là các kiểu nguyên thủy, mà là tham chiếu tới các đối
tượng khác thông qua các định danh của chúng. Các phương thức trong một lớp cũng được chia
thành hai loại: đơn giản và phức hợp. Phương thức đơn giản là phương thức khi thực hiện không
gọi các phương thức khác. Phương thức phức hợp là phương thức khi thực hiện gọi phương thức
khác trong cùng lớp đó hoặc các phương thức của lớp khác.
CSDL HĐT phát triển trong môi trường mạng hình thành hệ CSDL hướng đối tượng phân
tán. Phần lớn các hệ quản trị CSDLHĐT PT đều theo kiến trúc client/server. Với các đặc trưng của
mô hình đối tượng, kiến trúc các hệ quản trị CSDL HĐT PT thường phức tạp hơn, các vấn đề phức
tạp cần xem xét đó là [3]:
- Các đối tượng đóng gói dữ liệu và phương thức, vậy cần xác định đơn vị truyền giao giữa
client và server. Đơn vị này có thể là một trang, một đối tượng hoặc một nhóm các đối tượng. Đối
tượng không phải dữ liệu thụ động, và cần xét đến các vị trí, nơi các phương thức của đối tượng
được thực thi.
- Trong các hệ client/server quan hệ, client chỉ đơn giản gửi các truy vấn đến các server,
server thực hiện chúng rồi trả kết quả về cho client. Điều này được gọi là chuyển gửi chức năng
để xử lí. Trong các hệ client/server đối tượng, đây không phải là cách tốt nhất bởi vì quá trình
duyệt qua các cấu trúc đối tượng phức hợp của chương trình ứng dụng có thể chỉ ra rằng dữ liệu
phải được chuyển qua bên client. Vì dữ liệu được nhiều client dùng chung, quản lí bộ đệm lưu trữ
(cache) bên client để đảm bảo nhất quán dữ liệu là vấn đề quan trọng.
- Đối tượng có thể thuộc loại phức hợp, nhiều thành phần, có khả năng phải gửi trước các
đối tượng thành phần mỗi khi có một đối tượng yêu cầu. Các hệ client/server thông thường không
phải gửi trước dữ liệu, nhưng có thể các hệ client/server đối tượng sẽ phải chọn giải pháp gửi trước
dữ liệu.
Nhóm quản trị CSDL đối tượng (Object Database Management Group – ODMG) đề xuất
một chuẩn CSDL đối tượng, phiên bản mới nhất là ODMG 3.0 [9]. ODMG 3.0 định nghĩa các khái
niệm, các nghi thức giao tiếp chung giữa các hệ CSDL và cung cấp các đặc tả cơ bản nhằm hỗ trợ
cho các hệ quản trị CSDL khả năng chia sẻ dữ liệu, tính khả chuyển (portable) và các thao tác truy
vấn cơ bản. Chuẩn này gồm 3 thành phần: ngôn ngữ định nghĩa đối tượng ODL (Object Definition
Language), ngôn ngữ truy vấn dữ liệu OQL (Object Query Language) và các liên kết với các ngôn
ngữ lập trình hướng đối tượng.
197
Mai Thúy Nga, Đoàn Văn Ban, Nguyễn Mạnh Hùng
2.1.2. Truy vấn có biểu thức đường dẫn
Các truy vấn trong CSDL hướng đối tượng được biểu diễn bởi ngôn ngữ OQL, OQL là ngôn
ngữ mở rộng và kế thừa từ ngôn ngữ SQL, ngôn ngữ truy vấn chuẩn của CSDL quan hệ. Thiết kế
của OQL ở dạng hàm, kết quả của truy vấn có kiểu, điều này cho phép kết quả truy vấn này lại là
đầu vào cho một truy vấn khác, vì vậy có thể biểu diễn các truy vấn phức tạp.
Khi thực hiện truy vấn trong CSDL hướng đối tượng, nếu các lớp có các thuộc tính phức
hợp sẽ dẫn dắt truy vấn tới các đối tượng lồng nhau theo một biểu thức đường dẫn. Ví dụ lược đồ cơ
sở dữ liệu gồm bốn lớp: CanBoNghienCuu (Cán bộ nghiên cứu), CoQuan (Cơ quan), DiaChi (Địa
chỉ), ThanhPho (thành phố). Lớp CanBoNghienCuu có thuộc tính coQuan là một tập đối tượng
của lớp CoQuan, lớp CoQuan có thuộc tính diaChi là một đối tượng của lớp DiaChi, lớp DiaChi
có thuộc tính thanhPho là một đối tượng của lớp ThanhPho.
Giả sử truy vấn ở đây là liệt kê họ tên các cán bộ nghiên cứu trong thành phố Hà Nội và có
thể viết dưới dạng:
select c.hoTen
from CanBoNghienCuu as c
where c.coQuan.diaChi.thanhPho.ten = ”Hà Nội”
Hình 1. Minh hoạ biểu thức đường dẫn
c.coQuan.diaChi.thanhPho.ten là một biểu thức đường dẫn hay còn gọi là nối ẩn. Mỗi đối
tượng của lớp có một định danh duy nhất được hệ thống khởi tạo, các nối ẩn được thực hiện thông
qua các định danh này. Biểu thức đường dẫn được minh họa như hình 1. Biểu thức đường dẫn có
thể là trị đơn nếu mỗi thành phần của nó đều là trị đơn, ngược lại nếu có ít nhất một thành phần là
trị tập thì toàn bộ biểu thức là trị tập. Tối ưu hoá biểu thức đường dẫn cũng là một mục tiêu trong
xử lí truy vấn.
2.2. Bộ lọc Bloom
2.2.1. Cấu trúc bộ lọc Bloom
Bộ lọc Bloom được giới thiệu trong [6], là một cấu trúc dữ liệu xác suất để kiểm tra xem
một phần tử có nằm trong một tập hợp hay không. Cấu trúc của một bộ lọc Bloom bao gồm:
- Một dãy gồm n bit, được khởi tạo tất cả các giá trị là 0.
- Một tập các hàm băm h1, h2, hk . Mỗi hàm băm sẽ ánh xạ các giá trị khóa vào một giá trị
trong khoảng từ 1 đến n, tương ứng bit của bộ lọc.
- Một tập S gồm m giá trị khóa.
Với mỗi giá trị khóa k trong S: băm nó với các hàm băm, hàm băm thứ i có giá trị hi(k),
thiết lập bit thứ hi(k) của bộ lọc Bloom thành giá trị 1.
Chức năng của bộ lọc Bloom là xác định một phần tử x có thuộc tập S hay không. Nó được
dùng là bước tiền xử lí của quá trình tìm kiếm. Nếu sau khi lọc qua bộ lọc Bloom trả về kết quả
198
Xử lí truy vấn trong cơ sở dữ liệu hướng đối tượng phân tán sử dụng bộ lọc Bloom
“không” thì không cần thực hiện việc tìm kiếm nữa, nếu trả về kết quả “có thể có” thì thực hiện
tìm kiếm.
Để xác định một phần tử x bất kì có thuộc tập S hay không, chúng ta cũng tính toán k giá
trị là h1(x), ..., hk(x) từ x qua k hàm băm. Nếu k bit trong vector n-bit tại các vị trí tương ứng là
h1(x), h2(x), . . . , hk(x) đều có giá trị là 1 thì x “có thể” có trong tập S với một xác suất nào đó,
còn nếu chỉ cần ít nhất 1 bit có giá trị là 0 thì khẳng định là x không thuộc tập S. Chúng ta chỉ có
thể khẳng định là x “có thể” thuộc tập S là bởi vì trong vector bit, 1 bit có thể được gán giá trị là
1 nhiều lần bởi nhiều phần tử trong S khi khởi tạo bộ lọc. Chỉ cần một bit 0 chúng ta có thể khẳng
định x không thuộc S bởi vì nếu x thuộc S thì tất cả k bit tương ứng sẽ được gán là 1 khi khởi tạo
bộ lọc với phần tử x đó.
Ví dụ:
- Bộ lọc Bloom gồm 9 bit, ban đầu gán giá trị tất cả các bit bằng 0.
- Sử dụng hai hàm băm: Hàm thứ nhất h1(k) lấy các giá trị tại các vị trí lẻ (tính từ trái sang)
của k khi biểu diễn sang hệ nhị phân, chuyển về giá trị thập phân rồi chia dư cho 9. Hàm h2(k)
tương tự nhưng lấy giá trị tại các vị trí chẵn.
- S = {23, 147, 352}
- Quá trình xây dựng bộ lọc Bloom được minh hoạ như Bảng 1.
- Nếu x = 15, biểu diễn x nhị phân là 1111, h1(x) = h2(x) = 3. Tại bit số 3 của bộ lọc
Bloom giá trị là 0 nên x chắc chắn không thuộc S.
Bảng 1. Minh hoạ xây dựng bộ lọc Bloom
Bước Biểu diễn nhịphân của k h1(k) h2(k)
Bộ lọc
Bloom
Khởi tạo 000000000
k = 23 10111 7 1 010000010
k = 147 10010011 0 (9 mod 9) 5 110001010
k = 352 101100000 6 (24 mod 9) 4 110011110
2.2.2. Phân tích sai số
Với một bộ lọc có thể xảy ra hai lỗi sau:
- Lỗi dương tính sai (false positive): Kiểm tra qua bộ lọc là có nhưng tìm kiếm thực thì lại
không có.
- Lỗi âm tính sai (false negative): Kiểm tra qua bộ lọc là không có nhưng tìm kiếm thực thì
lại có.
Với bộ lọc Bloom sẽ không có khả năng xảy ra lỗi false negative mà chỉ có thể gặp phải lỗi
false positive với xác suất rất nhỏ. Xác suất gặp phải lỗi false positive phụ thuộc vào mật độ các
bit có giá trị 1 và số các hàm băm.
Xác suất để một bit ngẫu nhiên của mảng n bit được gán giá trị 1 bởi hàm băm là
1
n
, xác
xuất để bit đó không được gán giá trị 1 là (1− 1
n
). Xác suất để bit đó không được gán giá trị 1 bởi
bất kì hàm băm nào là (1 − 1
n
)k trong đó k là số các hàm băm. Với m giá trị khóa xác suất để bit
đó vẫn có giá trị 0 là (1− 1
n
)mk, và xác suất để bit đó được thiết lập thành 1 là 1− (1− 1
n
)mk.
199
Mai Thúy Nga, Đoàn Văn Ban, Nguyễn Mạnh Hùng
Xét quá trình kiểm tra một phần tử có nằm trong một tập hợp hay không. Thuật toán kiểm
tra k vị trí trong mảng xem chúng có bằng 1 hay không, xác suất tất cả chúng đều bằng 1 là
(1 − [1 − 1
n
]mk)k ≈ (1 − e− kmn )k với n rất lớn. Xác suất này không phụ thuộc vào phần tử được
kiểm tra nên được gọi là xác suất false positive. Xác xuất false positive có thể giảm xuống nếu
chọn giá trị n, k, và m thích hợp. Giá trị n cần phải khá lớn so vớim, xác xuất này còn có thể giảm
nếu tăng số hàm băm. Trong trường hợp tốt nhất, giá trị k tối ưu là k =
n
m
ln 2, khi đó xác suất
false positive được cực tiểu hóa theo k và sẽ là p = 2−k = 2−
nin2
m ⇒ n = − minp
(in2)2
. Nghĩa là để
xác suất false positive là hằng số cố định, kích thước của mảng là tuyến tính với số phần tử của
tập hợp.
2.3. Sử dụng bộ lọc Bloom trong xử lí truy vấn có biểu thức đường dẫn
2.3.1. Mô tả thuật toán
Chúng ta sẽ mô tả thuật toán sử dụng bộ lọc bloom để xử lí truy vấn có biểu thức đường dẫn
giữa hai lớp. Giả sử lớp Ci có một thuộc tính ak là một đối tượng của lớp Cj , lớp Ci đặt tại trạm S,
lớp Cj đặt tại trạm R. Dễ nhận thấy rằng kích thước một đối tượng của lớp Cj nhỏ hơn kích thước
một đối tượng lớp Ci. Giả sử có truy vấn chứa biểu thức đường dẫn từ lớp Ci sang lớp Cj . Gọi chi
phí truyền một đơn vị dữ liệu từ trạm S đến trạm R là cost(S,R), giả sử chi phí truyền này có tính
đối xứng, nghĩa là cost(S,R) = cost(R,S).
Ý tưởng ở đây là thay vì truyền toàn bộ các đối tượng của Cj từ S đến R đề kết hợp với Ci
(hoặc ngược lại), chúng ta sẽ lọc một số đối tượng của Cj mà cần thiết cho việc kết nối với Ci.
Như vậy khối lượng dữ liệu được truyền đi sẽ giảm đáng kể và đồng nghĩa với chi phí truyền dữ
liệu sẽ giảm. Cơ chế lọc sẽ được thực hiện bởi bộ lọc Bloom. Có ba trường hợp xảy ra: Truy vấn
xảy ra tại trạm S (là trạm chứa Ci), truy vấn xảy ra tại trạm R (là trạm chứa Cj), truy vấn xảy ra
tại một trạm khác cả S và R. Chúng ta sẽ xét lần lượt từng trường hợp.
Trường hợp 1: Truy vấn tại trạm S
- Xây dựng bộ lọc Bloom cho tất cả các đối tượng thuộc lớp Ci theo giá trị thuộc tính ak,
gọi là BF (Ci).
- Gửi BF (Ci) đến R (trạm chứa Cj), BF (Ci) được sử dụng để lọc các đối tượng của Cj .
- Gửi các đối tượng của Cj mà thỏa mãn điều kiện lọc ở trên đến S.
- Thực hiện việc truy vấn từ các đối tượng của Ci và Cj tại S.
Algorithm1 Case1(Ci, Cj , R, S)
BF (Ci) = createBloomFilter(Ci , ak);
send(BF (Ci), S,R);
C ′j = filter(Cj , BF (Ci));
send(C ′j , R, S);
result = join(Ci, Cj);
return result;
Trường hợp 2: Truy vấn tại trạm R
- Xây dựng bộ lọc Bloom cho tất cả các đối tượng thuộc lớp Cj theo giá trị thuộc tính định
danh, gọi là BF (Cj).
200
Xử lí truy vấn trong cơ sở dữ liệu hướng đối tượng phân tán sử dụng bộ lọc Bloom
- Gửi BF (Cj) đến S (trạm chứa Ci), BF (Cj) được sử dụng để lọc các đối tượng của Ci.
- Gửi các đối tượng của Ci mà thỏa mãn điều kiện lọc ở trên đến R.
- Thực hiện việc truy vấn từ các đối tượng của Ci và Cj tại R.
Algorithm2 Case2(Ci, Cj , R, S)
BF (Cj) = createBloomFilter(Ci , oid(Cj ));
send(BF (Cj), R, S);
C ′i = filter(Ci, BF (Ci));
send(C ′i , S,R);
result = join(C ′i , Cj);
return result;
Trường hợp 3: Truy vấn tại trạm không chứa cả Ci và Cj , giả sử là trạm P (P 6= S,P 6= R)
- So sánh chi phí để truyền một đơn vị dữ liệu trong 3 trường hợp:
+ (a) cost(S,R) + cost(R,P )
+ (b) cost(R,S) + cost(S,P )
+ (c) cost(S,P ) + cost(R,P )
- Nếu chi phí nhỏ nhất là trường hợp (a), thực hiện các bước như trường hợp 1, sau đó truyền
kết quả tử S đến P .
- Nếu chi phí nhỏ nhất là trường hợp (b), thực hiện các bước như trường hợp 2, sau đó truyền
kết quả tử R đến P .
- Nếu chi phí nhỏ nhất là trường hợp (c).
+ Nếu cost(S,P )⇐ cost(R,P )
Xây dựng bộ lọc Bloom cho tất cả các đối tượng thuộc lớp Ci theo giá trị thuộc tính ak,
gọi là BF (Ci).
Gửi BF (Ci) đến P, rồi từ P gửi tiếp BF (Ci) đến R. BF (Ci) được sử dụng để lọc các
đối tượng của Cj .
Gửi các đối tượng của Cj mà thỏa mãn điều kiện lọc ở trên từ R đến P , rồi từ P đến S.
Thực hiện việc truy vấn từ các đối tượng của Ci và Cj tại S.
Truyền kết quả từ S về P .
+ Nếu cost(S,P ) > cost(R,P ).
Xây dựng bộ lọc Bloom cho tất cả các đối tượng thuộc lớp Cj theo giá trị thuộc tính định
danh, gọi là BF (Cj).
Gửi BF (Cj) đến P, rồi từ P gửi tiếp BF (Cj) đến S. BF (Cj) được sử dụng để lọc các
đối tượng của Ci.
Gửi các đối tượng của Ci mà thỏa mãn điều kiện lọc ở trên từ S đến P , rồi từ P đến R.
Thực hiện việc truy vấn từ các đối tượng của Ci và Cj tại R.
Truyền kết quả từ R về P .
Algorithm3 Case3(Ci, Cj , R, S, P )
cost1 = cost(S,R) + cost(R,P )
cost2 = cost(R,S) + cost(S,P )
cost3 = cost(S,P ) + cost(R,P )
cost = min(cost1, cost2, cost3)
if (min == cost1) {
result = case1(Ci, Cj , R, S);
201
Mai Thúy Nga, Đoàn Văn Ban, Nguyễn Mạnh Hùng
send(result, S,P )
}
if (min == cost2) {
result = case2(Ci, Cj , R, S);
send(result, R,P )
}
if (min == cost3)
if (cost(S,P )⇒ cost(R,P )) {
BF (Ci) = createBloomFilter(Ci , ak);
send(BF (Ci), S, P );
send(BF (Ci), P,R);
C ′j = filter(Cj , BF (Ci));
send(C ′j , R, P );
send(C ′j , P, S);
result = join(Ci, C ′j);
}
else {
BF (Cj) = createBloomFilter(Cj , oid(Cj));
send(BF (Cj), R, P );
send(BF (Ci), P, S);
C ′i = filter(Ci, BF (Cj));
send(C ′i , S, P );
send(C ′i , P,R);
result = join(C ′i , Cj, R);
send(result, R,P );
}
2.3.2. Thảo luận về các tham số
Trong phần 3.2 chúng ta đã phân tích sai số và có công thức n = − mlnp
(ln2)2
. Khi chọn p là
một sai số cố định có giá trị đủ bé thì kích thước bộ lọc Bloom n tuyến tính với số lượng các giá
trị khóa, trong trường hợp này là số lượng đối tượng của lớp cần xây dựng bộ lọc Bloom (Ci hoặc
Cj). Bộ lọc Bloom có thể xây dựng một lần cho mỗi lớp và sử dụng nhiều lần khi có nhiều kết nối
với các lớp khác nhau.
Khi chi phí giao tiếp đường truyền càng lớn thì thuật toán càng hiệu quả vì giảm một cách
đáng kể chi phí truyền dữ liệu. Chi phí giảm này chính là tích của chi phí truyền một đơn vị dữ liệu
và tổng kích thước tất cả các đối tượng mà bị loại ra (khi thử với bộ lọc Bloom).
3. Kết luận
Bộ lọc Bloom là một cơ chế để kiểm tra sự có mặt của một phần tử trong một tập hợp, với
bộ lọc Bloom thay vì gửi toàn bộ dữ liệu chúng ta chỉ gửi đại diện của nó đến nơi cần kiểm tra.
Bài báo đề xuất một phương pháp sử dụng bộ lọc Bloom để xử lí truy vấn có biểu thức đường dẫn
giữa hai lớp. Với truy vấn xảy ra tại các vị trí khác nhau, chúng tôi đã cố gắng lựa chọn một cách
truyền dữ liệu mà chi phí truyền thấp nhất.
202
Xử lí truy vấn trong cơ sở dữ liệu hướng đối tượng phân tán sử dụng bộ lọc Bloom
Bài báo mới dừng lại ở việc xét truy vấn đường dẫn giữa hai lớp, một cơ sở để mở rộng cho
truy vấn với biểu thức đường dẫn qua nhiều lớp. Với biểu thức đường dẫn qua nhiều lớp chúng ta
sẽ phải quan tâm đến việc duyệt biểu thức đường dẫn, cách duyệt đơn giản nhất là duyệt tuần tự.
Hơn nữa để tối ưu hóa truy vấn phải tìm cách tối ưu hóa cục bộ tại mỗi trạm. Kết hợp tối ưu hóa
cục bộ tại mỗi trạm và tối ưu hóa việc truyền dữ liệu là hướng nghiên cứu tiếp theo của chúng tôi.
TÀI LIỆU THAM KHẢO
[1] Oscar Nierstrasz and Dennis Tsichritzis, 1986. An object-oriented environment for OIS
applications. In Proceedings of the 11th international conference on Very Large Data Bases,
Vol. 11, pp.335-345.
[2] David L. Spooner, 1986. An object-oriented data management system for mechanical CAD.
In Proceedings on the 1986 international workshop on Object-oriented database systems
(OODS ’86), pp. 233-234.
[3] Ozsu M. T. and Valduriez P., 2011. Principles of Distributed Database Systems. Third
Edition, Springer, New York.
[4] G. Graefe and D. Maier, 1988. Query optimization in object-oriented database systems: A
prospectus. In Lecture notes in computer science on Advances in object-oriented database
systems, K. R. Dittrich (Ed.). Springer-Verlag New York, pp. 358-363.
[5] Hyeokman Kim, Sukho Lee, 1994. Tree query optimization in distributed object-oriented
databases. EUROMICRO 94. System Architecture and Integration. Proceedings of the 20th
EUROMICRO Conference, pp. 45-52.
[6] Bloom, B. H., 1970. Space/time trade-o