Chức năng của các lớp

Một phần của tài liệu (LUẬN văn THẠC sĩ) phương pháp tổ chức cơ sở dữ liệu cho đối tượng chuyển động 04 (Trang 49 - 59)

Class name Description

RTree Lớp chính cho các chỉ mục đối tượng, nó chứa tất cả các chức năng thao tác và truy vấn cho các chỉ mục. RTNode Lớp mức thấp, trong đó xác định một giao diện node-

action để cho phép điều chỉnh thiết kế của nút.

Phần tử Lớp định nghĩa phần tử của đối tượng cũng như thao tác phần tử.

Cache, Cacheable Lớp hỗ trợ cây sử dụng bộ nhớ cache. BlockFile,

CachedBlockfile

Lớp mức thâp hỗ trợ thao tác và hoạt động của đĩa với hay không với bộ nhớ cache.

LinList, SortedLinlist

Lớp danh sách liên kết kép hỗ trợ hoạt động lưu trữ tạm thời trong việc xóa và chèn lại các phần tử.

Linkable, Slink Cấu trúc danh dách liên kết kép để lưu trữ danh sách tạm thời.

Movingobject Một cấu trúc mảng hỗ trợ tất cả các hoạt động của đối tượng chuyển động như chèn, xóa.

TPRsortMBR Một cấu trúc hỗ trợ thuật toán chèn lại để lưu trữ danh sách theo khoảng cách từ tâm của MBR.

a. Class Rtree: là một lớp cơ bản của cây, nó chứa tất cả các chức năng thao tác và truy vấn của cây. Sử dụng để xây dựng một cây TPR-tree từ một file giả lập được tạo. TPR-tree được xây dựng từ các tập dữ liệu:

dsfname: tên file cần tạo tfname: tên file được tạo b_len: độ dài của block c: bộ nhớ đệm

T: cây được xây dựng trongkhoảng [0, T] dimension: chiều

qmbrlen: độ dài của MBR qvbr: độ dài của VBR qst: mốc thời gian bắt đầu qed: mốc thời gian kết thúc

Trong Class Rtree xây dựng một số chức năng chính như:

- Insert (Entry* d): thực hiện chèn một phần tử vào cây TPR-tree. - Load_root: tạo một node root.

- Moving_sect(Entry *_e1, Entry *_e2, float _st, float _ed): phát hiện 2 vùng di chuyển giao nhau.

- Choose_path(Entry *_newe): tìm nút lá khi gia tăng diện tích MBR. - Check_path(Entry *_newe, float _minpen): kiểm tra đường dẫn nhận được từ choose_path đã thực sự tối ưu chưa.

- Delete_entry(Entry *_olde): xoá phần tử từ cây hiện tại - Update(char *_dsfname, int _update_time): cập nhật lại cây.

b. Class RTnode:dùng để tạo ra nút trên đĩa, tái tạo nút trên đĩa. Trong Class Rtree xây dựng một số chức năng chính như:

- RTNode (RTree *rt): để tạo ra nút trên đĩa

- RTNode(RTree *rt, int _block): tái tạo nút trên đĩa.

- Choose_subtree(Entry *_newe): thực hiện chọn cây con tốt nhất để chèn các phần tử.

- Enter(Entry *d): nhập các phần tử vào nút.

- FindLeaf(Entry *_q): thực hiện tìm các nút lá để chèn các phần tử.

- Get_mbr(): thực hiện khởi tạo mảng và trả lại mbr của nút ở thời gian hiện tại của cây TPR.

- Get_vmbr(): Chức thực hiện khởi tạo mảng và trả lại vbr của nút ở thời gian hiện tại của cây TPR.

- Insert(Entry *d, RTNode **_sn): chèn các phần tử vào nút.

- RangeQuery(Entry *_q, float _st, float _ed, int& _rsltcnt): thực hiện đưa ra kết quả của một truy vấn.

- Get_subtree_num_entries(): đưa ra số phần tử của cây con. - Model_split(RTNode *_new_nd): chức năng chia nút.

- Init_new_entries(int _size): chức năng khởi đầu cho mộ mảng các phần tử

- Update_parent_entry(int _pos): cập nhật MBR, VBR tới nút con. - Check_path(Entry *_newe, float _pen, float _minpen)

- Past_mbr(float *_mbr, float *_vbr, float _time, int _dim): chức năng điều chỉnh mbr theo vbr ở thời điểm t0.

- Future_mbr(float *_mbr, float *_vbr, float _time, int _dim): chức năng tạo mbr ở khoảng thời gian tương lai.

- Delete_entry(Entry *_olde): xóa phần tử ở cây hiện tại

c. Class Entry: Lớp định nghĩa phần tử của đối tượng cũng như thao tác của các phần tử. Lớp có một số chức năng sau:

- Enlarge(Entry *_e1, Entry *_e2): chức năng lấp đầy mbr và vbr của phần tử hiện tại.

- Gen_Linkable(): chức năng tạo ra một cấu trúc linkable từ các phần tử. Các đối tượng linkable được sử dụng trong linklist.

3.4.2. Biểu đồ tuần tự

Biểu đồ này mô tả hoạt động tương tác tuần tự giữa các lớp, như là các hoạt động Insert (Phần tử), Delete (Phần tử), RangeQuery. Hình 3.2 liệt kê tất cả các hoạt động chính của mỗi lớp, ví dụ như lớp RTNode chỉ sử dụng hoạt động truy cập đĩa.

Một số thuật toán sử dụng:

a. Thuật toán chèn vào một phần tử.

AlgorithmInsert (e) /* Input: e là một Entry để thực hiện chèn */

1. Re-insertedi= false for all levels 1≤ i ≤h-1 (h là độ cao của cây) 2. Intialize an entry re-insertion list Lreinsert

3. Invoke ChoosePath to find the leaf node N to insert e 4. Invoke Node Insert (N,e)

5. For each entry e’ in the Lreinsert

6. Invoke ChoosePath to find the leaf node N to insert e’ 7. Invoke Node Insert (N,e)

End Insert

b. Thuật toán chèn một Node.

AlgorithmNode Insert (N, e) /* Input: Nlà nút để thực hiện chèn entry */

1. If N is a leaf node

2. Enter the information of e 3. If N overflows

4. If Re-inserted= false //no Re-inserted at leaf level yet

5. Invoke Pick Worst to select a set Sworst of entries 6. Remove entries in Sworst from N; add them toLreinsert 7. Re-inserted0=true

8. Else

9. Invoke Node Split to split N into itself anh N’

10.Let P be the parent of N

11.Node Insert (P, Ø) or Node Insert (P, N’) if N has been split

12.Else //N is a non-leaf node

13.Similar to line 2-9 except that (i) the MBR/VBR of the affected child node is adjusted, and (ii) in lines 4,7 replace Re-inserted0 with Re- insertedi where I is the level of N

End Node Insert

c. Thuật toán xóa một phần tử từNode.

AlgorithmDelete (E,N) /* Input: xóa một entry từ nút N */

1. If N is a leaf node

2. Search all entries of N to find E.mbr 3. Else/* N is an internal node

4. Find all entries of N that cver E.mbr

5. Follow the corresponding subtrees until the leaf L that contains E is found

6. Remove E from L 7. Endif

9. If the root has only one child 10.Remove the root

11.Set as new root its only child 12.Endif

3.5. Một số kết quả thử nghiệm chƣơng trình 3.5.1. Form chƣơng trình

Chương trình demo thử nghiệm TPR-tree được viết trên ngôn ngữ C# của Microsoft visual Studio 2012, chạy trên máy tính PC với hệ điều hành Windows. Chương trình thiết kế với một số chức năng chính như sau:

- Form chính của chương trình: bao gồm 3 phần Cấu hình dữ liệu, Tạo cây dữ liệu TPR-Tree và Truy vấn dữ liệu, các quá trình sẽ được thực hiện tuần tự từ việc tạo dữ liệu đến việc truy vấn dữ liệu.

Hình 3.3. Form chính của chƣơng trình

- Cấu hình dữ liệu: trong phần này sử dụng để sinh ra các dữ liệu giả lập của các đối tượng chuyển động, nó tạo ra các file dữ liệu ngẫu nhiên dựa vào các tham số đầu vào như: số lượng đối tượng sẽ tạo, số mốc thời gian, tỷ lệ đối tượng trên khoảng thời gian. Dữ liệu tạo ra được đặt tên và lưu dưới dạng file với đuôi *.data.

- Tạo cây dữ liệu TPR-tree: trong phần này cây dữ liệu sẽ được tạo ra từ các dữ liệu giả lập, ta sẽ chọn file số liệu từ dữ liệu ngẫu nhiên để tạo lên một cây dữ liệu TPR-tree, sau đó sẽ ghi cây dữ liệu dưới dạng file *.tpr (file Index). Kết quả của việc tạo cây sẽ đưa ra các thông số liên quan đến việc tạo cây như: Cost of update, Node Internal, Node data, Data.

Hình 3.5. Form tạo cây Rtree

- Truy vấn dữ liệu: trong phần này dữ liệu sẽ được truy vấn dựa trên các file index, ta sẽ chọn file để thực hiện các truy vấn. Dữ liệu đầu vào truy vấn là số lần thực hiện truy vấn, khoảng thời gian truy vấn, giá trị MBR cần truy vấn và giá trị VBR cần truy vấn.

Hình 3.6. Form truy vấn dữ liệu

Kết quả của việc truy vấn sẽ được đưa ra màn hình bên phải với các thông số về: giá trị nút đi qua sau mỗi lần truy vấn, Avg data entries (trung bình số đối tượng

tìm được trong tương lai), Avg node accesses (trung bình số nút đi qua để có kết quả).

Hình 3.7. Form kết quả nhận đƣợc sau khi truy vấn 3.4.2. Thử nghiệm

Quá trình thử nghiệm là thực hiện trên cây TPR-tree, mục tiêu của quá trình thử nghiệm là so sánh việc kết quả đạt được khi thực hiện truy vấn các mốc thời gian trong tương lai với các khối lượng dữ liệu khác nhau. Giả định rằng các đối tượng di chuyển là tương tự nhau tại mỗi mốc thời gian truy vấn.

Mỗi một truy vấn gồm ba tham số truy vấn: Kính thước không gian của đối tượng (qrlen), vận tốc của đối tượng trên một chiều (qvlen) và khoảng thời gian truy vấn (qTlen). Trong thử nghiệm này sẽ test phạm vi truy vấn qrlen là [100, 100], qvlen là {-10, 10, -10, 10}, và khoảng thời gian qTlen từ [0, T]. Việc test sẽ thực hiện truy vấn ngẫu nhiên 100 lần sau đó lấu giá trị trung bình của mỗi lần truy vấn. Lưu ý rằng các truy vấn ở đây đều có kích thước, vectơ vận tốc và theo khoảng thời gian nghĩa là bản thân các truy vấn cũng là các cửa sổ chuyển động.

Bảng 3.7 mô tả giá trị đạt được trong tương lai khi thực hiện truy vấn tại những khoảng thời gian khác nhau 10, 20, 30, 40, 50 với khối lượng dữ liệu là 10000 (10k) đối tượng.

Bảng 3.8 mô tả giá trị đạt được trong tương lai khi thực hiện truy vấn tại những khoảng thời gian khác nhau 10, 20, 30, 40, 50 với khối lượng dữ liệu là 30000 (30k) đối tượng.

Bảng 3.9 mô tả giá trị đạt được trong tương lai khi thực hiện truy vấn tại những khoảng thời gian khác nhau 10, 20, 30, 40, 50 với khối lượng dữ liệu là 50000 (50k) đối tượng.

Trong các bảng dữ liệu, cột 1 thể hiện độ dài của khoảng thời gian truy vấn (T size), cột 2 thể hiện giá trị trung bình của số đối tượng tìm được trong tương lai (Avg data entries), cột 3 thể hiện giá trị trung bình của số nút đi qua để có kết quả (Avg node accesses), cột 4 thể hiện số nút trung gian (Internal nodes), cột 5 thể hiện số nút dữ liệu (Data nodes).

Bảng 3.7. TRP-tree tại khoảng thời gian khác nhau với 10k T size Avg data retrieves Avg Node access Internal node Data node Data

Một phần của tài liệu (LUẬN văn THẠC sĩ) phương pháp tổ chức cơ sở dữ liệu cho đối tượng chuyển động 04 (Trang 49 - 59)

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

(64 trang)