KẾT LUẬN CHƢƠNG 1

Một phần của tài liệu các kỹ thuật phân mảnh, gộp nhóm trong csdl phân tán (Trang 26 - 74)

4. Những nội dung nghiên cứu chính

1.3.KẾT LUẬN CHƢƠNG 1

Trong chƣơng vừa qua đã trình bầy đƣợc các khái niệm về mệnh đề, các phép toán mệnh đề, biểu thức logic. Tìm hiểu về các phƣơng pháp phân mảnh và cách thiết trong CSDL phân tán. Các lệnh phân mảnh dựa vào câu SQL

CSDL phân tán đã đƣợc trình bày có các kiểu phân mảnh chính là : Phân mảnh ngang, phân mảnh dọc và phân mảnh hỗn hợp ( Trong phân mảnh ngang đƣợc chia ra làm 2 loại là : Phân mảnh ngang nguyên thuỷ và phân mảnh ngang dẫn xuất ), từ những kiến thức tìm hiểu đƣợc trong chƣơng, làm cơ sở cần thiết cho việc mở rộng nghiên cứu các phần tiếp theo của luận văn.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Chƣơng 2: PHÂN MẢNH VÀ GỘP NHÓM TRONG CSDL PHÂN TÁN 2.1. CÁC KỸ THUẬT PHÂN MẢNH DỮ LIỆU TRONG CSDL

2.1.1. Loại bỏ dƣ thừa

Kết quả câu vấn tin của ngƣời sử dụng thƣờng đƣợc thể hiện trên một khung nhìn, có thể đƣợc bổ sung thêm nhiều vị từ để có đƣợc sự tƣơng ứng khung nhìn - quan hệ, nhằm bảo đảm đƣợc tính toàn vẹn ngữ nghĩa và bảo mật. Khi bổ sung nhƣ vậy có thể sinh ra các vị từ dƣ thừa cần phải loại bỏ. Ngƣời ta có thể loại bỏ vị từ dƣ thừa khi áp dụng các quy tắc luỹ đẳng sau:

1. p p p 2. p p p 3. p ^ T p 4. p F p 5. p F F 6. p T T 7. p p F 8. p p T 9. p1 (p1 p2) p1 10 . p1 (p1 p2) p1 2.1.2. Phân mảnh ngang :

2.1.2.1 Phân mảnh ngang vòng tròn Robin

- Giả sử cho trƣớc dãy số nguyên bất kỳ: n0, n1,…, np-1, np và cho số nguyên

N thì dãy {ni} sẽ phân thành N lớp dựa vào hàm (ni mod N) đƣợc đánh số 0, 2,…, N-1

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Cho N vùng (thiết bị) lƣu trữ dữ liệu đƣợc đánh số 0, 1,…, N-1. Một quan hệ với khóa chính ID, nhƣ vậy bộ tƣơng ứng giá trị ID của quan hệ sẽ đƣợc đặt lƣu vào vùng thứ (ID mod N).

Một trong những đoạn giả mã, có thể được viết như sau:

Ký hiệu Y = {n0, n1, …, np-1, np} For i = 0 To N-1

For Each element In Y If element mod N = i Save elementvào vùng i

Y - = element End If

Next element End For

Nhận xét

Trong trƣờng hợp tổng quát chúng ta xem ID là số thứ tự của bộ trong quan hệ.

Cách phân mảnh này dễ cài đặt và không xảy ra tình trạng thiếu cân đối về dữ liệu vì các vùng chỉ hơn kém nhau tối đa một bộ.

Kỹ thuật phân mảnh này dựa trên thứ tự các bộ nên nó không phụ thuộc vào bất cứ một thuộc tính nào của quan hệ đƣợc phân mảnh.

Phân mảnh Robin không thích hợp với các truy vấn khoảng vì phải tiến hành tìm kiếm trên tất cả các vùng có lƣu trữ quan hệ đang xét.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Ví dụ .2.1.2.1

Dùng giả mã để phân mảnh quan hệ Nhanvien theo vòng Robin (hình 2.1.2.1a).

IDNumber HO_VA_TEN NAM_SINH LUONG

142 Lê Văn Tám 1960 12000000

147 Hoàng Thị Thông 1970 10000000

149 Ngô Quốc Công 1948 12500000

152 Trần Thị Phƣợng 1966 11000000

153 Nguyễn Việt Hà 1975 11500000 (adsbygoogle = window.adsbygoogle || []).push({});

Hình 2.1.2.1a

Đƣợc phân mảnh Robin cho 4 vùng theo (IDNumber mod 4) nhƣ hình 2.1.2.1b.

Gỉa mã

FOR i = 0 to 3

SELECT * INTO Vungi FROM NhanVien

WHERE (IDNumber mod 4) = i

Kết quả đƣợc thể hiện tại các bảng Vungi tƣơng ứng sau:

Vùng 0: (IDNumber mod 4) = 0

IDNumber HO_VA_TEN NAM_SINH LUONG

152 Trần Thị Phƣợng 1966 11000000

a)

Vùng 1: (IDNumber mod 4) = 1

IDNumber HO_VA_TEN NAM_SINH LUONG

149 Ngô Quốc Công 1948 12500000

153 Nguyễn Việt Hà 1975 11500000

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Vùng 2: (IDNumber mod 4) = 2

IDNumber HO_VA_TEN NAM_SINH LUONG

142 Lê Văn Tám 1960 12000000

c)

Vùng 3: (IDNumber mod 4) = 3

IDNumber HO_VA_TEN NAM_SINH LUONG

147 Hoàng Thị Thông 1970 10000000

d)

Hình 2.1.2.1b

Tƣơng tự nếu phân mảnh Robin theo 4 vùng theo số thứ tự bộ (<Số thứ tự bộ> mod 4) thì sẽ đƣợc nhƣ hình 2.1.2.1c

Vùng 0 : (<Số thứ tự bộ> mod 4) = 0

IDNumber HO_VA_TEN NAM_SINH LUONG

152 Trần Thị Phƣợng 1966 11000000

a) (adsbygoogle = window.adsbygoogle || []).push({});

Vùng 1: (<Số thứ tự bộ> mod 4) = 1

IDNumber HO_VA_TEN NAM_SINH LUONG

142 Lê Văn Tám 1960 12000000

153 Nguyễn Việt Hà 1975 11500000

b)

Vùng 2: (<Số thứ tự bộ> mod 4) = 2

IDNumber HO_VA_TEN NAM_SINH LUONG

147 Hoàng Thị Thông 1970 10000000

c)

Vùng 3: (<Số thứ tự bộ> mod 4) = 3

IDNumber HO_VA_TEN NAM_SINH LUONG

149 Ngô Quốc Công 1948 12500000

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Hình 2.1.2.1c

2.1.2.2 Phân mảnh ngang theo hàm băm

Phân mảnh theo hàm băm là trƣờng hợp tổng quát của Robin. Giả sử cần phân mảnh quan hệ R cho N vùng đƣợc đánh số 0, 1,.., N-l với thuộc tính phân mảnh là A. Bộ t thuộc R đƣợc đƣa vào vùng k nếu k = t(A) mod N, trong đó t(A) là giá trị trên thuộc tính A của bộ t.

Mã giả như sau:

Y = {t(A)}

For i = 0 To N-1

For Each element In Y If element mod N = i

Save Bản ghi tƣơng ứng với element vào vùng i Y - = element

End If

Next element End For

Ví dụ 2.1.2.2 Với quan hệ Nhanvien như sau.

IDNumber HO_VA_TEN NGAY_SINH LUONG

142 Lê Văn Tám 12/8/1960 12000000

147 Hoàng Thị Thông 7/10/1970 10000000

149 Ngô Quốc Công 21/12/1947 12500000

152 Trần Thị Phƣợng 23/9/1967 11000000

153 Nguyễn Việt Hà 4/11/1977 11500000 (adsbygoogle = window.adsbygoogle || []).push({});

Hình 2.1.2.2a

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Phân mảnh quan hệ NhanVien kiểu hàm băm theo thuộc tính NGAY_SINH cho 3 vùng.

Giả mã:

FOR i = 0 to 2

SELECT * INTO Vungi FROM NhanVien

WHERE (Year(NGAY_SINH) mod 4) = i Kết quả các vùng nhƣ sau:

Vùng 0 : (Year(NGAY_SINH) mod 3) = 0

IDNumber HO_VA_TEN NGAY_SINH LUONG

149 Ngô Quốc Công 21/12/1947 12500000

153 Nguyễn Việt Hà 4/11/1977 11500000

a)

Vùng 1: (Year(NGAY_SINH) mod 3) = 1

IDNumber HO_VA_TEN NGAY_SINH LUONG

142 Lê Văn Tám 12/8/1960 12000000

b)

Vùng 2: (Year(NGAY_SINH) mod 3) = 2

IDNumber HO_VA_TEN NGAY_SINH LUONG

147 Hoàng Thị Thông 7/10/1970 10000000

152 Trần Thị Phƣợng 23/9//1967 11000000

c)

Hình 2.1.2.2b Nhận xét .

- Khi truy xuất đến các mẫu tin phải dựa vào giá trị thuộc tính đã dùng để phân mảnh.

- Dữ liệu sẽ đƣợc phân mảnh đều cho các vùng và thuận tiện cho việc tìm kiếm kết hợp.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

- Giảm sự quá tải khi phải khởi động truy vấn trên tất cả các vùng. Thông thƣờng các dữ liệu liên quan đƣợc nhóm lại với nhau và lƣu trữ trên cùng một trang vật lý.

- Nhƣng phân mảnh theo hàm băm thì các mẫu tin đƣợc phân mảnh ngẫu nhiên vào các vùng chứ không đƣợc nhóm lại với nhau nên không thích hợp với các truy vấn khoảng.

2.1.2.3 Phân mảnh ngang theo khoảng

Gộp những bộ mà giá trị thuộc tính nào đó của các bộ của chúng thuộc miền nào đó. Thông thƣờng dùng câu lệnh SQL, để phân ra nhiều mảnh, có dạng:

Vùng 0 (adsbygoogle = window.adsbygoogle || []).push({});

SELECT *

FROM <Tên quan hệ> WHERE <Condition0>

Vùng 1

SELECT *

FROM <Tên quan hệ> WHERE <Condition1> ...

Vùng n

SELECT *

FROM <Tên quan hệ> WHERE <Conditionn>

Chú ý rằng các Conditioni, Conditionj với i jlà các điều kiện khoảng loại trừ nhau.

Ví dụ 2.1.2.3

Phân mảnh theo NAM_SINH của quan hệ Nhanvien SELECT *

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ FROM NhanVien WHERE NAM_SINH < 1960 Kết quả hình 2.1.2.3a SELECT * FROM NhanVien

WHERE 1960 <= NAM_SINH AND NAM_SINH <= 1970 Kết quả hình 2.1.2.3b

SELECT *

FROM NhanVien

WHERE 1960 <= NAM_SINH AND NAM_SINH <= 1970 Kết quả hình 2.1.2.3b SELECT * FROM NhanVien WHERE NAM_SINH > 1970 Kết quả hình 2.1.2.3c Vùng 0 : NAM_SINH < 1960

IDNumber HO_VA_TEN NAM_SINH LUONG

149 Ngô Quốc Công 1947 12500000

Hình 2.1.2.3 a

Vùng 1 : 1960 <= NAM_SINH AND NAM_SINH <= 1970

IDNumber HO_VA_TEN NAM_SINH LUONG

142 Lê Văn Tám 1960 12000000

147 Hoàng Thị Thông 1970 10000000

152 Trần Thị Phƣợng 1967 11000000

Hình 2.1.2.3 b

Vùng 2 : NAM_SINH > 1970

IDNumber HO_VA_TEN NAM_SINH LUONG

153 Nguyễn Việt Hà 1977 11500000

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Nhận xét: (adsbygoogle = window.adsbygoogle || []).push({});

- Cách phân mảnh này thuận lợi cho các phép tìm kiếm kết hợp, truy vấn khoảng và nhóm dữ liệu. Tuy nhiên, dễ gây ra sự chênh lệch dữ liệu khi tất cả các mẫu tin trong quan hệ có giá trị trên thuộc tính phân mảnh nằm hầu hết trong một khoảng nào đó.

- Các loại phân mảnh ngang, phân mảnh dọc hoặc phân mảnh hỗn hợp đều có thể thực hiện bằng SQL nhƣ sau:

SELECT <Danh sách thuộc tính> FROM <Tên quan hệ>

WHERE <Condition>

Trong đó <Danh sách thuộc tính > và <Condition> đƣợc kiến tạo cho phù hợp với mục đích phân mảnh ngang, phân mảnh dọc hoặc phân mảnh hỗn hợp.

2.1.3 Phân mảnh dọc

Phân mảnh dọc một quan hệ tổng thể n-bộ R là tách R thành các quan hệ con R1,R2,…,Rk sao cho quan hệ R có thể đƣợc khôi phục lại từ các quan hệ con này bằng phép nối :

R= R1 R2, ..., Rk

Ví dụ 2.1.3

Xét các phép toán đại số quan hệ sau:

DUAN3 = $1.$3DUAN DUAN4 = $1.$4DUAN

DUAN3 DUAN4

MADA NGANSACH MADA TENDA

D1 20000 D1 CSDL

D2 12000 D2 CÀI ĐẶT

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

D4 25000 D4 PHÁT TRIỂN

Dễ thấy, các thỏa mãn tính tái thiết đƣợc và tính đầy đủ

DUAN3 DUAN ; DUAN4 DUAN; DUAN= DUAN3 DUAN4

2.1.4 Phân mảnh hỗn hợp

Là kết hợp cả phân mảnh ngang và phân mảnh dọc

Ví dụ 2.1.4

Xét các phép toán đại số quan hệ sau :

DUAN5 = NGANSACH 20000( $1.$3DUAN)

DUAN6 = NGANSACH > 20000( $1.$3DUAN)

DUAN5 DUAN6

TENDA NGANSACH TENDA TENDA

CSDL 20000 CSDL 28000

CÀI ĐẶT 12000 CÀI ĐẶT 25000

2.2. CÁC LỆNH SQL GỘP NHÓM (adsbygoogle = window.adsbygoogle || []).push({});

Các lệnh SQL gộp nhóm chính là các lệnh SQL có sự hỗ trợ của các hàm thƣ viện nhƣ:

Hàm COUNT: Đếm số bộ có trong một quan hệ

Hàm TOTAL: Tính tổng các giá trị trong một trƣờng của một quan hệ Hàm MAX: Cho giá trị cực đại của một trƣờng trong một quan hệ Hàm MIN: Cho giá trị cực tiểu của một trƣờng trong một quan hệ

Hàm AVERAGE: Cho giá trị trung bình cộng của một trƣờng trong một quan hệ.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Câu lệnh SQL là một loại ngôn ngữ con dữ liệu quan hệ đƣợc xác nhận là rất mạnh. Phép toán cơ bản trong SQL là phép ánh xạ, đƣợc mô tả về cú pháp nhƣ là khối SELECT - FROM - WHERE.

Mệnh đề SELECT nghĩa là chọn các thuộc tính ra, hay còn gọi là thuộc tính kết quả, nếu không chỉ ra thuộc tính thì dùng dấu * có nghĩa là tất cả các thuộc tính của quan hệ đang đƣợc chỉ ra sau mệnh đề FROM. Sau mệnh đề WHERE là một biểu thức điều kiện lọc dữ liệu (hay còn gọi là biểu thức logic).

Ngoài ra, đễ mở rộng khả năng của ngôn ngữ, khối SELECT - FROM - WHERE còn đƣợc bổ sung thêm các mệnh đề GROUPE BY, having, order by. Các hàm mẫu và một số phần mềm còn thêm cả mệnh đề contpute, for browse.

Trong các phần sau sè trình bầy chi tiết tiếng mệnh đề. Dạng tổng quát của khối SELECT đƣợc biểu diễn nhƣ sau: SELECT <* | DISTINCT> | danh-sách-thuộc tính>

FROM <danh_sách_tên_bảng | tên_các_wiev> [WHERE <biểu_thức_điều_kiện>]

[GROUPE BY <danh_sách_tên_cột> ] [ HAVING <biểu_thức_điều_kiện>]

[ ORDER BY <tên_cột | số thứ_tự_cột |biểu_thức> [ ASC | DESC ]]

Trong dó mệnh đề WHERE dƣợc biểu diễn dạng: WHERE [NOT] BiểuThức PhépSoSánh BiểuThức WHERE [NOT] tên_cột [ NOT] LlKE xâu_kí_tự

WHERE [NOT] biểu_thức [NOT] BETWEEN biểu_thức AND biểu_thức WHERE [NOT] BiểuThức [NOT] lN ({danhSách | CâuHỏiCon})

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

WHERE [NOT] EXISTS (CâuHỏiCon)

WHERE [NOT] BiểuThức PhépSoSánh { ANY I ALL (CâuHỏiCon)} WHERE [NOT] <TênCột PhépKếtNối TênCột>

WHERE [NOT] <Biểu_thức_logic>

WHERE [NOT] <Biểu_thức> { AND | OR } [NOT] <Biểu_thức> Một số dạng SQL hay dùng (dữ liệu ở hình 1)

Tìm kiếm theo câu hỏi đơn giản

Không có điều kiện và câu hỏi chỉ liên quan tới một quan hệ. Cho biết danh sách các nhân viên.

SELECT *

FROM NhanVien

Các cách kết sau dây là hoàn toàn phù hợp trong SQL SELECT HO_VA_TEN, LUONG, LUONG * 110% FROM NhanVien

Đế bảng kết quả đúng là một quan hệ (không có bộ trùng nhau ), trong mệnh đề select cần thêm từ khoá distinkt

Cho biết tên các mã của các dự án đã đƣợc triển khai SELECT DISTINCT MaDuAn

FROM PhanNhiem

Tìm kiếm với điều kiện đơn giản

Tìm mã số những nhan viên đang làm cho dự án có mã dự án DA2. SELECT MaNV

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ (adsbygoogle = window.adsbygoogle || []).push({});

WHERE MaDuAn = “DA2”

Trong SQL các phép sánh đƣợc sử dụng bao gồm >, <, >= , <=, = và <>. Các phép tính trên dùng cho mọi loại dữ liệu.

Tìm kiếm có xử lý xâu kế tự

Trong trƣờng hợp ngƣời sử dụng ,không nhớ rõ tên ngƣời hoặc địa danh... ví dụ là Hải Phòng hay Hà Nội khi đó thì viết:

SELECT * FROM DuAn

WHERE TenDuAn LIKE “H%”

Trong đó ký hiệu % là thay thế cho một xâu con, dấu phân cách „_' để thay thế cho một ký tự.

A%B. xâu ký tự bất kỳ bắt đầu bằng chữ A và kết thúc bảng chữ B %A : xâu ký tự bất kỳ có ký tự kết thúc là A

A_B : xâu gồm ba ký tự có kỷ tự thứ hai là bất kỳ A_ : xâu gồm hai ký tự có ký tự đầu là A.

Xử lý ngày tháng

Ngoài các phép tính thông thƣờng SQL còn có thể xử lý dữ liệu dạng ngày tháng.

Ví dụ 2.2-1 : Tìm những nhân viên sinh trƣớc năm 1965 là 10 năm từ quan

hệ NhanVien (hình 2.1.2a). SELECT *

FROM NhanVien

WHERE NAM_SINH – 1960 = 10

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Tìm tên nhân viên có lƣơng từ 10000000 đến 13000000 SELECT HO_VA_TEN

FROM NhanVien

WHERE LUONG BETWEEN 10000000 AND 13000000

Tìm kiếm sử dụng IN

Tìm mã số nhân viên đang tham gia ít nhất một trong các dự án có mã DA1, DA2 và DA3.

SELECT MaNV FROM PhanNhiem

WHERE MaDuAn IN (“DA1” , “DA2” , ”DA3”)

Các hàm thư viện hay dùng

Trong SQL có các hàm mẫu gồm COUNT (đếm), MAX (giá trị cực đại) , MIN (giá trị cực tiểu) , SUM (tổng), AVG (tính trng bình cộng),….

Hàm COUNT

Riêng hàm COUNT khi có đối số là '*' là chỉ đếm số bản ghi thỏa yêu cầu tìm kiếm mà không cần quan tâm tới bất kỳ cột nào.

Ví dụ 2.2-2:

Cho biết số dự án mà nhân viên có mã NV3 đã tham gia. SELECT COUNT ( * )

FROM PhanNhiem (adsbygoogle = window.adsbygoogle || []).push({});

WHERE MaNV = “NV3”

Hàm MAX, MIN

Tìm sự chênh lệch lớn nhất về thời gian làm việc của nhân viên tham gia dự án có mã DA2 (dữ liệu lấy ở hình 1.2).

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

SELECT MAX(ThoiGianLV) - MIN(ThoiGianLV) FROM PhanNhiem

WHERE MaDuAn = “DA2”

Cách dùng tư khóa DISTINCT

Cho biết danh sách mã số nhân viên (phân biệt) đang tham gia vào một dự án nào đó (số liệu ở hình 1).

SELECT COUNT ( DISTINCT MaNV ) FROM PhanNhiem

Chú ý rằng đối số của các hàm có thể là một biểu thức số học bất kỳ

Các lệnh gom nhóm GROUP BY

Cú pháp

SELECT <Danh sách thuộc tính 1> FROM <Tên quan hệ>

GROUPE BY <Tên thuộc tính>[ | <Danh sách thuộc tính 2>]

Sau mệnh đề này quan hệ đƣợc lấy ra theo danh sách thuộc tính 1 sau đó phân thành nhóm theo <Tên thuộc tính> | <Danh sách thuộc tính 2> sau GROUPE BY, có nghĩa là các hộ có cùng giá trị của <Tên thuộc tính> | <Danh sách thuộc tính 2> đƣợc sắp xếp liên tiếp nhau, hết nhóm này dấn nhóm khác.

Ví dụ 2.2-3 :

Tìm mã số dự án mà mỗi nhân viên đang tham gia trong bảng PhanNhiem sau:

MaNV MaDuAn ChucVu ThoiGianLV

NV3 DA4 Lập trình viên 48

NV2 DA1 Nhân viên phân tích và thiết kế 24

NV4 DA3 Kỹ sƣ 36

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

NV4 DA2 Kỹ sƣ 18

NV5 DA4 Gim đốc 48

NV3 DA3 Nhân viên tƣ vấn 10

NV1 DA1 Giám đốc 12

NV2 DA2 Nhân viên phân tích và thiết kế 6

NV4 DA1 Kỹ sƣ 23

NV5 DA2 Phó giám đốc 24

NV1 DA2 Trợ lý 12 (adsbygoogle = window.adsbygoogle || []).push({});

NV5 DA1 Nhân viên tƣ vấn 24

NV1 DA3 Nhân viên tƣ vấn 13

ELECT MaNV, MaDuAn FROM PhanNhiem

GROUPE BY MaNV

Sau mệnh đề này quan hệ NhanVien đƣợc lấy ra sau đó phân thành nhóm theo mã số MaNV, có nghĩa là các hộ có cùng giá trị MaNV đƣợc sắp xếp liên tiếp nhau, hết nhóm này dấn nhóm khác.

Kết quả sẽ là

MaNV MaDuAn ChucVu ThoiGianLV

NV1

DA1 Giám đốc 12

DA2 Trợ lý 12

DA3 Nhân viên tƣ vấn 13

NV2

DA1 Nhân viên phân tích và thiết kế 24

DA2 Nhân viên phân tích và thiết kế 6

NV3

DA4 Lập trình viên 48

DA3 Nhân viên tƣ vấn 10

NV4

DA3 Kỹ sƣ 36

Một phần của tài liệu các kỹ thuật phân mảnh, gộp nhóm trong csdl phân tán (Trang 26 - 74)