Đề tài Xây dựng ứng dụng phần mềm mã nguồn mở hệ quản trị cơ sở dữ liệu hướng đối tượng perst xây dựng ứng dụng quản lý hệ thống thông tin địa lý thành phố Hồ Chí Minh

Tài liệu Đề tài Xây dựng ứng dụng phần mềm mã nguồn mở hệ quản trị cơ sở dữ liệu hướng đối tượng perst xây dựng ứng dụng quản lý hệ thống thông tin địa lý thành phố Hồ Chí Minh: TRѬӠNG ĈҤI HӐC KHOA HӐC TӴ NHIÊN KHOA CÔNG NGHӊ THÔNG TIN %Ӝ MÔN CÔNG NGHӊ PHҪN MӄM e&f NGUYӈN THӎ LÝ - NGUYӈN SAO Kǣ ӬNG DӨNG PHҪN MӄM MÃ NGUӖN MӢ Hӊ QUҦN TRӎ CѪ SӢ DӲ LIӊU HѬӞNG ĈӔI TѬӦNG PERST XÂY DӴNG ӬNG DӨNG QUҦN LÝ Hӊ THӔNG THÔNG TIN ĈӎA LÝ THÀNH PHӔ HCM KHÓA LUҰN CӰ NHÂN TIN HӐC TpHCM, 2005 - 2 - TRѬӠNG ĈҤI HӐC KHOA HӐC TӴ NHIÊN KHOA CÔNG NGHӊ THÔNG TIN %Ӝ MÔN CÔNG NGHӊ PHҪN MӄM e&f NGUYӈN THӎ LÝ - 0112187 NGUYӈN SAO Kǣ- 0112186 ӬNG DӨNG PHҪN MӄM MÃ NGUӖN MӢ Hӊ QUҦN TRӎ CѪ SӢ DӲ LIӊU HѬӞNG ĈӔI TѬӦNG PERST XÂY DӴNG ӬNG DӨNG QUҦN LÝ Hӊ THӔNG THÔNG TIN ĈӎA LÝ THÀNH PHӔ HCM KHÓA LUҰN CӰ NHÂN TIN HӐC GIÁO VIÊN HѬӞNG DҮN Th.s NGUYӈN MINH NAM NIÊN KHOÁ 2001-2005 - 3 - /ӠI CҦM ѪN Chúng em chân thành cám ѫn Khoa Công nghӋ Thông tin, trѭӡng Ĉҥi hӑc Khoa hӑc Tӵ nhiên tҥo ÿLӅu kiӋn cho chúng em thӵc hiӋn ÿӅ tài luұn văn tӕt nghiӋp này. Chúng em chân thành cám ѫn thҫy NguyӉn Minh Nam ÿã tұn tình hѭӟng Gүn, chӍ bҧo chúng em trong suӕt thӡi gian thӵc hiӋn ÿӅ...

pdf138 trang | Chia sẻ: hunglv | Lượt xem: 1036 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Đề tài Xây dựng ứng dụng phần mềm mã nguồn mở hệ quản trị cơ sở dữ liệu hướng đối tượng perst xây dựng ứng dụng quản lý hệ thống thông tin địa lý thành phố Hồ Chí Minh, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
TRѬӠNG ĈҤI HӐC KHOA HӐC TӴ NHIÊN KHOA CÔNG NGHӊ THÔNG TIN %Ӝ MÔN CÔNG NGHӊ PHҪN MӄM e&f NGUYӈN THӎ LÝ - NGUYӈN SAO Kǣ ӬNG DӨNG PHҪN MӄM Mà NGUӖN MӢ Hӊ QUҦN TRӎ CѪ SӢ DӲ LIӊU HѬӞNG ĈӔI TѬӦNG PERST XÂY DӴNG ӬNG DӨNG QUҦN LÝ Hӊ THӔNG THÔNG TIN ĈӎA LÝ THÀNH PHӔ HCM KHÓA LUҰN CӰ NHÂN TIN HӐC TpHCM, 2005 - 2 - TRѬӠNG ĈҤI HӐC KHOA HӐC TӴ NHIÊN KHOA CÔNG NGHӊ THÔNG TIN %Ӝ MÔN CÔNG NGHӊ PHҪN MӄM e&f NGUYӈN THӎ LÝ - 0112187 NGUYӈN SAO Kǣ- 0112186 ӬNG DӨNG PHҪN MӄM Mà NGUӖN MӢ Hӊ QUҦN TRӎ CѪ SӢ DӲ LIӊU HѬӞNG ĈӔI TѬӦNG PERST XÂY DӴNG ӬNG DӨNG QUҦN LÝ Hӊ THӔNG THÔNG TIN ĈӎA LÝ THÀNH PHӔ HCM KHÓA LUҰN CӰ NHÂN TIN HӐC GIÁO VIÊN HѬӞNG DҮN Th.s NGUYӈN MINH NAM NIÊN KHOÁ 2001-2005 - 3 - /ӠI CҦM ѪN Chúng em chân thành cám ѫn Khoa Công nghӋ Thông tin, trѭӡng Ĉҥi hӑc Khoa hӑc Tӵ nhiên tҥo ÿLӅu kiӋn cho chúng em thӵc hiӋn ÿӅ tài luұn văn tӕt nghiӋp này. Chúng em chân thành cám ѫn thҫy NguyӉn Minh Nam ÿã tұn tình hѭӟng Gүn, chӍ bҧo chúng em trong suӕt thӡi gian thӵc hiӋn ÿӅ tài. Chúng em chân thành cám ѫn quý thҫy cô trong khoa ÿã tұn tình giҧng Gҥy, trang bӏ cho chúng em nhӳng kiӃn thӭc quý báu trong nhӳng năm hӑc Yӯa qua. Chúng con xin nói lên lòng biӃt ѫn sâu sҳc ÿӕi vӟi cha mҽ, nhӳng ngѭӡi ÿã chăm sóc, nuôi dҥy chúng con thành ngѭӡi và luôn ÿӝng viên tinh thҫn cho chúng con. Và cNJng chân thành cám ѫn các anh chӏ và bҥn bè ÿã ӫng hӝ, giúp ÿӥ, trao ÿәi kiӃn thӭc, kinh nghiӋm và ÿӝng viên chúng em trong thӡi gian hӑc tұp và nghiên cӭu. 0һc dù chúng em ÿã cӕ gҳng hoàn thành luұn văn trong phҥm vi và khҧ Qăng cho phép nhѭng chҳc chҳn sӁ không tránh khӓi nhӳng sai sót. Chúng em kính mong nhұn ÿѭӧc sӵ cҧm thông và tұn tình chӍ bҧo cӫa quý thҫy cô và các bҥn. Tp.Hӗ Chí Minh, tháng 7 năm 2005 NguyӉn Thӏ Lý – 0112187 NguyӉn Sao KǤ - 0112186 - 4 - TÓM TҲT LUҰN VĂN Luұn văn ÿѭӧc tә chӭc thành các phҫn chính nhѭ sau: Chѭѫng 1: Giӟi thiӋu tҫm quan trӑng, mөc tiêu, phҥm vi cӫa ÿӅ tài, các cѫ sӣ lý thuyӃt và hѭӟng tiӃp cұn. Chѭѫng 2: Cách tә chӭc cѫ sӣ dӳ liӋu hѭӟng ÿӕi tѭӧng PERST và nhӳng so sánh vӟi các cách tә chӭc cѫ sӣ dӳ liӋu quan hӋ và các hӋ cѫ sӣ dӳ liӋu hѭӟng ÿӕi tѭӧng khác. Chѭѫng 3: Giӟi thiӋu vӅ mô hình Topology: nêu lên nhӳng khái niӋm cѫ bҧn, các ÿӕi tѭӧng trong Topology và các cҩp Topology. Chѭѫng 4: Giӟi thiӋu vӅ GIS: giӟi thiӋu tәng quan vӅ GIS, các giҧi pháp và ӭng Gөng vӅ GIS và ӭng dөng GIS trên PocketPC Chѭѫng 5: Giӟi thiӋu vӅ chuҭn OpenGIS Chѭѫng 6: Tәng quan vӅ PocketPC: Các vҩn ÿӅ và giҧi pháp trên thiӃt bӏ. Tình trҥng bӝ nhӟ, tҥo cѫ sӣ dӳ liӋu và ӭng dөng bҧn ÿӗ trên PocketPC. Chѭѫng 7: Ӭng dөng bҧn ÿӗ: mô hình phân tích thiӃt kӃ. Chѭѫng 8: KӃt luұn, ÿánh giá và hѭӟng phát triӇn Chѭѫng 9: Nhӳng tài liӋu tham khҧo khi thӵc hiӋn ÿӅ tài Chѭѫng 10:Nêu nhӳng thuұt toán chính trong chѭѫng trình - 5 - 0ӨC LӨC /ӠI CҦM ѪN ........................................................................................................................ 3 TÓM TҲT LUҰN VĂN......................................................................................................... 4 DANH SÁCH CÁC HÌNH..................................................................................................... 8 DANH SÁCH CÁC BҦNG...................................................................................................10 0ӜT SӔ KHÁI NIӊM, THUҰT NGӲ VÀ TӮ VIӂT TҲT ..................................................11 CHѬѪNG 1 : HiӋn trҥng và yêu cҫu .................................................................................15 1.1 HiӋn trҥng: .................................................................................................................15 1.2 Giҧi quyӃt bài toán: ....................................................................................................16 CHѬѪNG 2 : Tәng quan vӅ Perst .....................................................................................17 2.1 Giӟi thiӋu: ..................................................................................................................17 2.2 Ĉһc tính:.....................................................................................................................18 2.2.1 Persistency by reachability:....................................................................................18 2.2.2 Semi transparent object loading: ............................................................................21 2.2.3 Automatic scheme evaluation.................................................................................23 2.2.4 Relation: ................................................................................................................24 2.2.5 Index: ....................................................................................................................25 2.2.6 Giao tác (Transaction):...........................................................................................29 2.3 Transparent API: ........................................................................................................31 2.3.1 Dùng.NET Remoting API: .....................................................................................31 2.3.2 Dùng các thuӝc tính ҧo (virtual properties):............................................................32 2.4 Cѫ chӃ thӵc hiӋn giao tác (Transaction):.....................................................................33 2.5 Nhӳng trѭӡng hӧp nên dùng PERST: .........................................................................37 2.6 Các thông sӕ cӫa PERST:...........................................................................................38 2.7 Sѫ lѭӧc vӅ RTree:.......................................................................................................44 2.7.1 Giӟi thiӋu:..............................................................................................................44 2.7.2 Sѫ lѭӧc vӅ dӳ liӋu không gian (spatial data) và các giҧi pháp: ................................44 2.8 So sánh vӟi các hӋ quҧn trӏ cѫ sӣ dӳ liӋu hѭӟng ÿӕi tѭӧng khác: ................................45 CHѬѪNG 3 : Giӟi thiӋu vӅ mô hình Topology.................................................................50 3.1 Giӟi thiӋu: ..................................................................................................................50 3.2 Các khái niӋm cѫ bҧn trong Topology: .......................................................................50 3.3 Các loҥi ÿӕi tѭӧng trong Topology: ............................................................................51 3.4 Các cҩp cӫa Topology: ...............................................................................................53 - 6 - 3.5 MBR – Minimum Bounding Rectangle: .....................................................................59 CHѬѪNG 4 : Giӟi thiӋu vӅ GIS .......................................................................................60 4.1 Giӟi thiӋu vӅ các ӭng dөng và giҧi pháp vӅ GIS: ........................................................60 4.2 Mô hình dӳ liӋu cӫa thông tin ÿӏa lý: ..........................................................................61 4.3 Thu thұp dӳ liӋu: ........................................................................................................64 4.4 Các giҧi thuұt nghiên cӭu vӅ GIS: ..............................................................................66 4.5 Các cҩu trúc dӳ liӋu không gian trong GIS: ................................................................67 4.5.1 Cây tӭ phân (Quad Tree):.......................................................................................67 4.5.2 k-d Tree: ................................................................................................................68 4.5.3 R-Tree: ..................................................................................................................69 4.5.4 R*-Tree: ................................................................................................................70 4.5.5 R+-Tree:.................................................................................................................71 4.6 Ӭng dөng bҧn ÿӗ: .......................................................................................................72 4.6.1 Các kiӇu bҧn ÿӗ: ....................................................................................................72 4.6.2 Các ÿӕi tѭӧng cӫa bҧn ÿӗ:......................................................................................72 4.7 Ӭng dөng GIS trên PocketPC:....................................................................................73 CHѬѪNG 5 : Giӟi thiӋu vӅ chuҭn OpenGIS .....................................................................75 5.1 Các kiӇu dӳ liӋu hình hӑc cӫa OpenGIS: ....................................................................75 5.2 OpenGIS Specification (ÿһc tҧ OpenGIS):..................................................................76 5.2.1 Các khái niӋm: .......................................................................................................76 5.2.2 Nhӳng dӏch vө OpenGIS (OpenGIS Services ):......................................................78 5.2.3 Mӝt mô hình nhӳng cӝng ÿӗng thông tin (Information Communities Model ): .......79 5.2.4 Ĉһc ÿLӇm: ..............................................................................................................79 5.2.5 Phân loҥi: ...............................................................................................................81 5.3 OpenGIS Abstract Specification: ................................................................................82 5.3.1 Essential Model (mô hình bҧn chҩt ): .....................................................................83 5.3.2 Abstract Model: .....................................................................................................85 CHѬѪNG 6 : Tәng quan vӅ PocketPC .............................................................................89 6.1 Tәng quan vӅ PocketPC: ............................................................................................89 6.2 Khҧ năng lұp trình trên PocketPC:..............................................................................89 6.3 Mӝt sӕ vҩn ÿӅ khi lұp trình ӭng dөng trên PocketPC: .................................................89 6.3.1 Tӕc ÿӝ và các hӛ trӧ khҧ năng hiӇn thӏ: ..................................................................89 6.3.2 Khҧ năng và hình thӭc lѭu trӳ:...............................................................................90 6.3.3 Tѭѫng tác giӳa ngѭӡi sӱ dөng và thiӃt bӏ: ..............................................................91 6.4 Các giҧi pháp cho ӭng dөng bҧn ÿӗ trên PocketPC: ....................................................92 6.4.1 Yêu cҫu chung: ......................................................................................................92 - 7 - 6.4.2 Vҩn ÿӅ tӕi ѭu tӕc ÿӝ hiӇn thӏ: .................................................................................93 6.5 Tә chӭc dӳ liӋu bҧn ÿӗ trên PocketPC:.......................................................................93 CHѬѪNG 7 : Ӭng dөng bҧn ÿӗ: .......................................................................................95 7.1 Phân tích và xác ÿӏnh yêu cҫu:....................................................................................95 7.2 Phân tích - thiӃt kӃ:.....................................................................................................96 7.2.1 Sѫÿӗ sӱ dөng: .......................................................................................................96 7.2.2 Ĉһc tҧ Use-Case chính: ..........................................................................................97 7.2.2.1 Tìm kiӃm ÿѭӡng ÿi: ...............................................................................................97 7.2.2.2 Tìm kiӃm Region: ..................................................................................................98 7.2.2.3 Tìm ÿѭӡng ÿi ngҳn nhҩt: ........................................................................................99 7.2.2.4 Tìm chu trình tӕi ѭu: ............................................................................................101 7.2.3 Sѫÿӗ lӟp Class Diagram:.....................................................................................102 7.2.3.1 Sѫÿӗ tәng quát:...................................................................................................102 7.2.3.2 Sѫÿӗ lӟp dӳ liӋu:.................................................................................................103 7.2.3.3 Sѫÿӗ lӟp vӁ:........................................................................................................103 7.2.3.4 Sѫÿӗ sӵ kiӋn: ......................................................................................................104 7.2.4 Mô tҧ các lӟp: ......................................................................................................104 7.2.5 Các lѭu ÿӗ hoҥt ÿӝng: ..........................................................................................111 7.3 ThiӃt kӃ giao diӋn: ....................................................................................................124 7.3.1 Giao diӋn trên Desktop: .......................................................................................124 7.3.2 Giao diӋn trên PocketPC: .....................................................................................131 7.4 Cài ÿһt:.....................................................................................................................131 CHѬѪNG 8 : KӃt Luұn, Ĉánh giá và hѭӟng phát triӇn ...................................................132 8.1 KӃt luұn, ÿánh giá:....................................................................................................132 8.2 Hѭӟng phát triӇn: .....................................................................................................132 CHѬѪNG 9 : Tài liӋu tham khҧo....................................................................................133 CHѬѪNG 10 : Phө lөc .................................................................................................134 10.1 Bài toán tìm ÿѭӡng ÿi ngҳn nhҩt giӳa hai ÿLӇm:........................................................134 10.1.1 Phát biӇu bài toán:................................................................................................134 10.1.2 Giҧi quyӃt bài toán:..............................................................................................134 10.2 Bài toán tìm chu trình tӕi ѭu .....................................................................................136 10.2.1 Phát biӇu bài toán.................................................................................................136 10.2.2 Giҧi quyӃt bài toán:..............................................................................................137 - 8 - DANH SÁCH CÁC HÌNH Hình 3.2-1 Các ÿӕi tѭӧng trong mô hình Topology...............................................................51 Hình 3.4-1 Quan hӋ Topology cҩp 0 .....................................................................................56 Hình 3.4-2 Quan hӋ Topology cҩp 1 và 2..............................................................................57 Hình 3.4-3 Quan hӋ Topology cҩp 3 .....................................................................................58 Hình 4.2-1 Thông tin cҫn lѭu trӳ ..........................................................................................61 Hình 4.2-2 So sánh Raster và Vector ....................................................................................64 Hình 4.3-1 Phѭѫng pháp Scanning .......................................................................................65 Hình 4.5.1-1 Cây tӭ phân .....................................................................................................67 Hình 4.5.2-1 K-D Tree .........................................................................................................68 Hình 4.5.3-1 R-Tree .............................................................................................................69 Hình 4.5.5-1 R+-Tree ...........................................................................................................71 Hình 4.6.2-1 Các ÿӕi tѭӧng chính trong bҧn ÿӗ ....................................................................73 Hình 5.1-1 HӋ phân cҩp các kiӇu dӳ liӋu hình hӑc cӫa OpenGIS. .........................................76 Hình 5.3.1-1 Lӟp khái niӋm..................................................................................................85 Hình 7.2.1-1 Sѫÿӗ sӱ dөng tәng quát...................................................................................96 Hình 7.2.2.1-1 Use Case - Tìm kiӃm Edge............................................................................97 Hình 7.2.2.2-1 Use Case: Tìm kiӃm Region..........................................................................98 Hình 7.2.2.3-1 Use Case – Tìm ÿѭӡng ÿi ngҳn nhҩt ..............................................................99 Hình 7.2.2.4-1 Use-Case - Tim chu trình tӕi ѭu ..................................................................101 Hình 7.2.3.1-1 Sѫÿӗ tәng quát ...........................................................................................102 Hình 7.2.3.2-1 Sѫ lӟp dӳ liӋu .............................................................................................103 Hình 7.2.3.3-1 Sѫÿӗ lӟp vӁ ................................................................................................103 Hình 7.2.3.4-1 Sѫÿӗ sӵ kiӋn ..............................................................................................104 Hình 7.2.4-1 Lӟp CNode ....................................................................................................106 Hình 7.2.4-2 Lӟp CEdge ....................................................................................................109 Hình 7.2.5-1 Sequense Diagram: HiӇn thӏ bҧn ÿӗ ...............................................................112 Hình 7.2.5-2 Collabration Diagram: HiӇn thӏ bҧn ÿӗ...........................................................113 Hình 7.2.5-3 Sequence Diagram: Tìm ÿѭӡng ngҳn nhҩt ......................................................113 Hình 7.2.5-4 Collabration Diagram: Tìm ÿѭӡng ngҳn nhҩt .................................................114 Hình 7.2.5-5 Sequence Diagram: Tìm Edge........................................................................115 Hình 7.2.5-6 Collabration Diagram: Tìm Edge ...................................................................116 Hình 7.2.5-7 Sequence Diagram: Tìm chu trình tӕi ѭu ........................................................117 Hình 7.2.5-8 Collabrotion Diagram: Tìm chu trình tӕi ѭu ...................................................118 Hình 7.2.5-9 Sequence Diagram: Dӏch chuyӇn vùng nhìn ...................................................119 - 9 - Hình 7.2.5-10 Collabrotion Diagram: Di chuyӇn vùng nhìn ................................................120 Hình 7.2.5-11 Sequence Diagram: TӍ lӋ lҥi bҧn ÿӗ..............................................................120 Hình 7.2.5-12 Collaboration Diagram: TӍ lӋ lҥi bҧn ÿӗ .......................................................121 Hình 7.2.5-13 Sequence Diagram: Tìm ÿӏa ÿLӇm ................................................................121 Hình 7.2.5-14 Collaboration Diagram: Tìm ÿӏa ÿLӇm..........................................................122 Hình 7.2.5-15 Sequence Diagram: Tìm giao lӝ ...................................................................123 Hình 7.2.5-16 Collaboration Diagram: Tìm giao lӝ.............................................................123 Hình 7.3.1-1 Khung nhìn tәng quát vӅ giao diӋn.................................................................124 Hình 7.3.1-2 Toolbar cӫa chѭѫng trình ...............................................................................124 Hình 7.3.1-3 Các chӭc năng chính trên thanh công cө ........................................................127 Hình 7.3.1-4 Thanh thӵc ÿѫn File .......................................................................................128 Hình 7.3.1-5 Thanh thӵc ÿѫn View.....................................................................................128 Hình 7.3.1-6 Khung nhìn bҧn ÿӗ thu nhӓ ............................................................................130 Hình 7.3.1-7 Khung Layer..................................................................................................130 Hình 7.3.1-8 Khung hiӇn thӏ thông tin ÿӕi tѭӧng.................................................................131 - 10 - DANH SÁCH CÁC BҦNG %ҧng 2.2.4-1 Các mӕi quan hӋ giӳa 2 lӟp A va B .................................................................25 %ҧng 2.2.5-1 Các kiӇu Index ÿѭӧc PERST hӛ trӧ: ................................................................29 %ҧng 2.6-1 Hҵng sӕÿѭӧc ÿӏnh nghƭa sҹn trong lӟp StorageImpl...........................................42 %ҧng 2.8-1 So sánh các ÿһc tính cӫa các hӋ quҧn trӏ .............................................................47 %ҧng 2.8-2 Bҧng so sánh kӃt quҧ cӫa các hӋ quҧn trӏ cѫ sӣ dӳ liӋu hѭӟng ÿӕi tѭӧng.............49 %ҧng 3.4-1 Các cҩp Topology trong các lӟp VPF .................................................................55 %ҧng 3.4-2 Các cӝt ÿѭӧc yêu cҫu ÿӇÿӏnh nghƭa quan hӋ Topology trong VPF......................56 %ҧng 3.5-1. Ĉӏnh nghƭa khung chӳ nhұt nhӓ nhҩt MBR........................................................59 %ҧng 4.2-1 Bҧng so sánh kiӇu dӳ liӋu Raster va Vector...........................................................64 %ҧng 7.1-1 Các chӭc năng chính ..........................................................................................96 %ҧng 7.2.4-1 Lӟp CDatabase..............................................................................................105 %ҧng 7.2.4-2 Lӟp CMapView.............................................................................................105 %ҧng 7.2.4-3 Lӟp CMapEvent ............................................................................................106 %ҧng 7.2.4-4 Thuӝc tính lӟp CNode ...................................................................................107 %ҧng 7.2.4-5 Phѭѫng thӭc lӟp CNode ...............................................................................108 %ҧng 7.2.4-6 Thuӝc tính lӟp CEdge...................................................................................110 %ҧng 7.2.4-7 Phѭѫng thӭc lӟp CEdge................................................................................111 %ҧng 7.3.1-1 Các chӭc năng chính trên thanh thӵc ÿѫn ......................................................129 - 11 - 0ӜT SӔ KHÁI NIӊM, THUҰT NGӲ VÀ TӮ VIӂT TҲT Khái niӋm Ĉӏnh nghƭa Ghi chú OODBMS (Object- Oriented Database Management System) +Ӌ quҧn trӏ cѫ sӣ dӳ liӋu Kѭӟng ÿӕi tѭӧng PERST Là mӝt hӋ quҧn trӏ cѫ sӣ Gӳ liӋu hѭӟng ÿӕi tѭӧng Nhúng - -Embedded Có nghƭa là PERST ÿѭӧc tích hӧp chһt vào chѭѫng trình, gҫn nhѭ khoҧng cách giӳa database và chѭѫng trình rҩt nhӓ, PERST trӵc tiӃp lѭu dӳ liӋu trong các ÿӕi tѭӧng Fӫa chѭѫng trình và không cҫn có nhӳng ÿRҥn mã làm công viӋc chuyӇn Gӳ liӋu tӯ cѫ sӣ dӳ liӋu thành ÿӕi tѭӧng và ngѭӧc Oҥi Topology Là cҩu trúc cho mô hình Pҥng lѭӟi giao thông GIS ( Geography +Ӌ thӕng thông tin ÿӏa - 12 - Information System ) lý. Là mӝt công nghӋ Gӵa trên máy tính ÿӇ xây Gӵng bҧn ÿӗ, phân tích và xӱ lý các ÿӕi tѭӧng Wӗn tҥi và các sӵ kiӋn [ҧy ra trên trái ÿҩt. Thông tin không gian Thông tin vӅ nhӳng ÿһc ÿLӇm liên quan ÿӃn hình Gҥng, vӏ trí, quan hӋ cӫa các ÿӕi tѭӧng ÿӏa lý. Bao gӗm hai dҥng: ‡ 'ҥng hình hӑc: mô tҧ các ÿһc ÿLӇm hình dҥng, vӏ trí. Ví Gө nhѭ tӑa ÿӝ cӫa ÿLӇm, ÿѭӡng… ‡ Dҥng Topology: mô tҧ quan hӋ giӳa các ÿӕi tѭӧng hình Kӑc. Ví dө nhѭ nhӳng vùng nào kӅ Yӟi mӝt vùng xác ÿӏnh. Thông tin phi không gian ( thông tin thuӝc tính ) Thông tin vӅ nhӳng ÿһc ÿLӇm liên quan ÿӃn thӕng kê, thông tin sӕ, thông tin ÿһc trѭng gán cho Pӛi thuӝc tính cӫa ÿӕi Ví dө nhѭ tên ÿѭӡng phӕ, dân sӕ… - 13 - Wѭӧng PDA ( Personal Digital Assistant ) ThiӃt bӏ ÿLӋn tӱ hӛ trӧ cá nhân, giúp ngѭӡi sӱ Gөng lѭu trӳ các thông tin cá nhân, công viӋc Fҫn thiӃt cNJng nhѭ các phҫn mӅm tӕi thiӇu trên Pӝt thiӃt bӏ nhӓ gӑn Pocket PC Khái niӋm này có thӇ dùng ÿӇ chӍ: + HӋ ÿLӅu hành nhúng Pocket PC do Microsoft phát triӇn Gӵa trên nhân cӫa HӋ ÿLӅu hành Windows CE + Các thiӃt bӏ PDA sӱ dөng hӋÿLӅu hành Pocket PC Edge Ĉӕi tѭӧng cҥnh trong mô hình Topology Trong bài, Edge tѭѫng ÿѭѫng vӟi ÿѭӡng. Khi nhҳc Wӟi Edge, hay ÿѭӡng có thӇ hiӇu nghƭa nhѭ nhau. - 14 - Region Ĉӕi tѭӧng vùng ӣ ÿây không ÿӅ cұp ÿӃn quұn huyӋn nhѭng có thӇ hiӇu Region là quұn huyӋn. ID Ĉӏnh danh cӫa ÿӕi tѭӧng Trong bài không nhҳc tӟi tên ÿѭӡng, quұn huyӋn mà chӍ nhҳc tӟi ID vì cѫ sӣ dӳ liӋu không ÿӫ thông tin tên ÿѭӡng. Và khi nhҳc tӟi tên Fӫa ÿӕi tѭӧng bҩt kǤ thì hiӇu là ID. - 15 - CHѬѪNG 1 : HiӋn trҥng và yêu cҫu 1.1 HiӋn trҥng: Trên thӃ giӟi hiӋn nay ÿã có nhiӅu phҫn mӅm giҧi quyӃt các bài toán vӅ Eҧn ÿӗ giao thông nhѭ: RouteSmart, BusStops, Arclogistics, Routronic 2000, DynaRoute…Ӣ ViӋt Nam nói riêng cNJng có mӝt sӕ công ty nhѭ DolSoft, Hài Hoà, … ÿã có mӝt sӕ sҧn phҭm vӅ GIS nhѭ Street Finder, SmartMap…. Các Vҧn phҭm trên ÿa phҫn sӱ dөng cѫ sӣ dӳ liӋu ÿѭӧc tә chӭc trên các hӋ quҧn trӏ cѫ sӣ dӳ liӋu quan hӋ hoһc tӵ tҥo. Tuy nhiên vүn có vҩn ÿӅÿѭӧc ÿһt ra: 1.Chi phí cӫa càc hӋ quҧn trӏ cѫ sӣ dӳ liӋu thѭѫng mҥi nӃu có dùng. 2.Sӵ khó khăn và có khi là “rҳc rӕi” trong cách lұp trình giao tiӃp vӟi các Fѫ sӣ dӳ liӋu phӭc tҥp có nhiӅu bҧng, quan hӋ… Thұt ra, hai vҩn ÿӅ trên có thӇÿѭӧc giҧi quyӃt tѭѫng ÿӕi tӕt bҵng cách sӱ Gөng hӋ quҧn trӏ cѫ sӣ dӳ liӋu hѭӟng ÿӕi tѭӧng PERST (mã nguӗn mӣ). PERST là mӝt hӋ cѫ sӣ dӳ liӋu tѭѫng ÿӕi nhӓ (so vӟi các hӋ cѫ sӣ dӳ liӋu khác) vӟi phҫn lõi chӍ gӗm khoҧng 5000 dòng mã. Yêu cҫu cҩu hình cӫa PERST tѭѫng ÿӕi thҩp. Hѫn nӳa, PERST cNJng không cҫn ÿӃn “sӵ quҧn trӏ” thѭӡng thҩy ӣ các hӋ cѫ sӣ dӳ liӋu. Mһc dù ÿѫn giҧn nhѭ vұy nhѭng PERST Yүn hӛ trӧÿҫy ÿӫ tính ACID trong viӋc thӵc hiӋn giao tác (transaction) và hӛ trӧ viӋc phөc hӗi (recovery) tѭѫng ÿӕi nhanh khi hӋ thӕng gһp sӵ cӕ. Không chӍ dӯng lҥi ӣÿó mà PERST có hӛ trӧ cҧ viӋc phát triӇn trên môi trѭӡng compact.NET framework nên có khҧ năng phát triӇn ӭng dөng trên các thiӃt bӏ di ÿӝng dùng WinCE hay PocketPC. - 16 - Vì vұy, ta có thӇ thҩy viӋc dùng PERST ÿӇ giҧi quyӃt bài toán vӅ quҧn lý KӋ thӕng thông tin ÿӏa lý (GIS) là hoàn toàn khҧ thi. 1.2 Giҧi quyӃt bài toán: 0ӝt trong các yӃu tӕ quan trӑng quyӃt ÿӏnh sӵ thành công hay thҩt bҥi cӫa Pӝt hӋ thӕng thông tin ÿӏa lí là viӋc lӵa chӑn mô hình cҩu trúc dӳ liӋu thích Kӧp, cho phép lѭu trӳ và khai thác thông tin mӝt cách hiӋu quҧ. Và mô hình Topology thӇ hiӋn tӕt nhӳng ÿòi hӓi trên (Mô hình này sӁÿѭӧc ÿӅ cұp sau trong luұn văn). Vì dӳ liӋu Topology trên PERST không có sҹn nên chúng ta Fҫn xây dӵng lҥi dӳ liӋu theo mô hình Topology. Dӳ liӋu thô (dӳ liӋu nguӗn) ÿѭӧc dùng trong ӭng dөng này là các tұp tin text. Bài toán sӁÿѭӧc giҧi quyӃt chӫ yӃu bҵng sӵ phӕi hӧp các kiӃn thӭc vӅ GIS,PERST và ÿӗ hoҥ. - 17 - CHѬѪNG 2 : 7әng quan vӅ PERST 2.1 Giӟi thiӋu: PERST là mӝt hӋ cѫ sӣ dӳ liӋu “nhúng” dành cho các ӭng dөng cҫn tính Qăng lѭu trӳ. PERST ÿѭӧc thiӃt kӃ dành riêng cho lұp trình và không có giao diӋn ÿӗ hӑa ÿӇ quҧn trӏ. ViӋc sӱ dөng PERST khá ÿѫn giҧn và ÿҥt ÿѭӧc hiӋu Qăng tѭѫng ÿӕi cao. Ĉһc ÿLӇm chính dӉ thҩy nhҩt cӫa PERST là sӵ tích hӧp chһt chӁ cӫa PERST vӟi mӝt ngôn ngӳ lұp trình xác ÿӏnh. HiӋn tҥi PERST chӍ hӛ trӧ cho 2 ngôn ngӳ lұp trình là Java và C#. Không giӕng vӟi các hӋ quҧn trӏ cѫ sӣ dӳ liӋu hѭӟng ÿӕi tѭӧng khác (OODBMSes), PERST không cҫn dùng ÿӃn các bӝ biên dӏch hay các bӝ tiӅn [ӱ lý ÿһc biӋt khác. Nhѭ vұy, PERST có khҧ năng cung cҩp ÿѭӧc “tính trong suӕt” trong lұp trình ӣ mӭc ÿӝ cao. Các hàm API cӫa PERST tiӋn lӧi, dӉ sӱ Gөng và có tӕc ÿӝ cao. Có thӇ lҩy ví dө khi so sánh vӟi Ozone (mӝt hӋ cѫ sӣ Gӳ liӋu hѭӟng ÿӕi tѭӧng khác viӃt bҵng Java). Vӟi giӟi hҥn (benchmark) 007, PERST tҥo database nhanh gҩp 100 lҫn và thӵc hiӋn phép duyӋt qua các ÿӕi tѭӧng trong cѫ sӣ dӳ liӋu nhanh gҩp 10 lҫn so vӟi Ozone. Và khi so vӟi Pӝt hӋ cѫ sӣ dӳ liӋu hѭӟng ÿӕi tѭӧng thѭѫng mҥi khác là ObjectStore PSE Pro, PERST nhanh hѫn gҩp 4 lҫn. PERST là mӝt hӋ cѫ sӣ dӳ liӋu tѭѫng ÿӕi nhӓ (so vӟi các hӋ cѫ sӣ dӳ liӋu khác) vӟi phҫn lõi chӍ gӗm khoҧng 5000 dòng mã. Yêu cҫu cҩu hình cӫa PERST tѭѫng ÿӕi thҩp. Hѫn nӳa, PERST cNJng không cҫn ÿӃn “sӵ quҧn trӏ” thѭӡng thҩy ӣ các hӋ cѫ sӣ dӳ liӋu. Mһc dù ÿѫn giҧn nhѭ vұy nhѭng PERST Yүn hӛ trӧÿҫy ÿӫ tính ACID trong viӋc thӵc hiӋn giao tác (transaction) và hӛ trӧ viӋc phөc hӗi (recovery) tѭѫng ÿӕi nhanh khi hӋ thӕng gһp sӵ cӕ. - 18 - Có hai bҧn cài ÿһt cӫa PERST, mӝt bҵng ngôn ngӳ Java và mӝt bҵng C#. %ҧn cài ÿһt trên C# ÿѭӧc chuyӇn tӯ Java dùng bӝ chuyӇn ÿәi Java sang C# (mһc dù phҧi có nhiӅu thay ÿәi cҫn thӵc hiӋn mӟi có ÿѭӧc bҧn hoàn chӍnh). 0һc dù bҧn cài ÿһt dùng C# hӛ trӧ nhiӅu kiӇu “nguyên thӫy” hѫn (gӗm có kiӇu sӕ nguyên không dҩu và kiӇu liӋt kê (enum)) nhѭng trong các phѭѫng diӋn khác, các tính năng cӫa hai bҧn là nhѭ nhau. Riêng PERST.NET có hӛ trӧ cҧ viӋc phát triӇn trên môi trѭӡng compact.NET framework nên có khҧ Qăng phát triӇn ӭng dөng trên các thiӃt bӏ di ÿӝng dùng WinCE hay PocketPC. 2.2 Ĉһc tính: Trong phҫn này chúng ta sӁ ÿi vào các tính chҩt quan trӑng nhҩt cӫa PERST. Cө thӇ chúng ta sӁ tìm hiӇu phiên bҧn cài ÿһt trên môi trѭӡng.NET (gӑi tҳt là PERST.NET). Ӣÿây các tính chҩt có tӯ nguyên gӕc tiӃng Anh sӁ ÿѭӧc giӳ nguyên do không có tӯ tiӃng ViӋt thay thӃ ngҳn gӑn mà ÿúng nghƭa.. 2.2.1 Persistency by reachability: Trong ӭng dөng dùng PERST, mӑi ÿӕi tѭӧng cӫa các lӟp ÿѭӧc dүn xuҩt tӯ Oӟp PersistentÿӅu có khҧ năng lѭu trӳ (persistent hay còn dӏch là bӅn vӳng). .Ӈ tӯ bây giӡ, ta sӁ gӑi tҳt các ÿӕi tѭӧng này là các ÿӕi tѭӧng persistent. Các ÿӕi tѭӧng này ÿѭӧc tӵÿӝng lѭu vào database khi nó ÿѭӧc tham chiӃu tӯ mӝt ÿӕi tѭӧng persistent khác và phѭѫng thӭc store cӫa ÿӕi tѭӧng khác ÿó ÿѭӧc Jӑi. Có nghƭa là ta không cҫn phҧi gӑi trӵc tiӃp, tѭӡng minh phѭѫng thӭc store cӫa mӝt ÿӕi tѭӧng khi muӕn lѭu ÿӕi tѭӧng ÿó. - 19 - Database có mӝt ÿӕi tѭӧng ÿһc biӋt gӑi là root. Ĉӕi tѭӧng root này là ÿӕi Wѭӧng duy nhҩt ÿѭӧc truy xuҩt mӝt cách ÿһc biӋt (dùng phѭѫng thӭc Storage.getRoot). Còn các ÿӕi tѭӧng persistent khác ÿѭӧc truy xuҩt theo cách bình thѭӡng: hoһc truy xuҩt bҵng tham chiӃu tӯ các ÿӕi tѭӧng persistent nhѭ trên hoһc truy xuҩt bҵng cách dùng các ÿӕi tѭӧng bao chӭa (container class) nhѭ Index,Link hay Relation. Không giӕng nhѭ các hӋ cѫ sӣ dӳ liӋu Kѭӟng ÿӕi tѭӧng khác, chӍ có thӇ có duy nhҩt mӝt ÿӕi tѭӧng root trong cѫ sӣ Gӳ liӋu. PERST yêu cҫu mӛi lӟp persistentÿӅu phҧi dүn xuҩt tӯ lӟp Persistent. Có nghƭa là các lӟp “ngoҥi lai” (không dүn xuҩt tӯ lӟp Persistent) không thӇ ÿѭӧc lѭu trong database. Ĉây chính là cái giá phҧi trҧ cӫa sӵÿѫn giҧn và không dùng ÿӃn các bӝ biên dӏch hay tiӅn xӱ lý ÿһc biӋt. Và các thành phҫn Fӫa các lӟp persistent cNJng bӏ giӟi hҥn trong các kiӇu sau: KiӇu vô hѭӟng (scalar type): Bool, int, short, double, enum … KiӇu chuӛi: KiӇu System.String. KiӇu ngày tháng: KiӇu System.DateTime. KiӇu tham chiӃu ÿӃn các ÿӕi tѭӧng persistent: các lӟp kӃ thӯa tӯ lӟp Persistent hay các giao diӋn (interface) kӃ thӯa tӯ giao diӋn IPersistent. KiӇu giá trӏ (value type): Các kiӇu giá trӏ cӫa C#. Các giá trӏ này ÿѭӧc lѭu trӵc tiӃp trong ÿӕi tѭӧng chӭa chúng. KiӇu dӳ liӋu nhӏ phân thô: Các lӟp cӫa C# kӃ thӯa tӯ giao diӋn IPersistent hay tӯ giao diӋn IValue và ÿѭӧc ÿánh dҩu là Serializable. Cѫ chӃ Serialization chuҭn sӁ ÿѭӧc dùng ÿӇ ÿóng gói dӳ liӋu cӫa các ÿӕi - 20 - Wѭӧng thành các mҧng byte và lѭu chúng vào database. Các lӟp này sӁ ÿѭӧc ÿánh dҩu là Serializable và không ÿѭӧc chӭa các tham chiӃu ÿӃn các ÿӕi tѭӧng persistent khác. KiӇu mҧng: Các mҧng mӝt chiӅu vӟi thành phҫn là các kiӇu dӳ liӋu ÿѭӧc nêu trên. KiӇu Link: ÿҥi diӋn cho quan hӋ mӝt-nhiӅu trong mô hình cѫ sӣ dӳ liӋu. Hay nhìn theo góc ÿӝ lұp trình ÿây chính là kiӇu mҧng ÿӝng chӭa các ÿӕi tѭӧng persistent. Có mӝt vҩn ÿӅ là PERST không tӵ biӃt ÿѭӧc rҵng liӋu mӝt ÿӕi tѭӧng persistent nào ÿó ÿã có thay ÿәi gì chѭa trong quá trình làm viӋc. Muӕn biӃt ÿѭӧc ÿLӅu ÿó chӍ có cách là ta tӵ so sánh tӯng field cӫa trҥng thái cNJ và mӟi Yӟi nhau. Nhѭng nhѭ vұy chi phí rҩt cao. Vì thӃ nên trong PERST, lұp trình viên hoàn toàn chӏu trách nhiӋm vӅ viӋc lѭu ÿӕi tѭӧng nào vào cѫ sӣ dӳ liӋu. Có hai cách trong PERST ÿӇ ta có thӇ lѭu mӝt ÿӕi tѭӧng vào cѫ sӣ dӳ liӋu: Cách thӭ nhҩt là dùng phѭѫng thӭc Persistent.Store. Phѭѫng thӭc này khi ÿѭӧc gӑi bӣi ÿӕi tѭӧng nào sӁ lѭu bҧn thân ÿӕi tѭӧng ÿó và các ÿӕi tѭӧng ÿѭӧc tham chiӃu tӯ nó mӝt cách trӵc tiӃp hay không trӵc tiӃp mà chѭa ÿѭӧc Oѭu. Có nghƭa là nӃu ta gӑi phѭѫng thӭc Store này ÿӕi vӟi ÿӕi tѭӧng gӕc cӫa Pӝt cây thì lҫn lѭӧt tҩt cҧ các ÿӕi tѭӧng cӫa cây này sӁÿѭӧc lѭu xuӕng bӝ nhӟ phө. Cách thӭ hai là dùng phѭѫng thӭc Persistent.Modify: Phѭѫng thӭc này chӍ ÿánh dҩu các ÿӕi tѭӧng rҵng chúng ÿã bӏ thay ÿәi chӭ không lѭu ngay lұp tӭc vào database. Cách này ÿһc biӋt hӳu dөng khi ÿӕi tѭӧng ÿѭӧc thay ÿәi nhiӅu - 21 - Oҫn trong mӝt giao tác. Lúc ÿó, thao tác ghi ÿƭa chӍ phҧi thӵc hiӋn mӝt lҫn vào cuӕi giao tác, tăng hiӋu suҩt lên ÿáng kӇ. 2.2.2 Semi transparent object loading: Nhѭÿã ÿӅ cұp ӣ trên, PERST không dùng bҩt cӭ bӝ biên dӏch hay tiӅn xӱ lý ÿһc biӋt nào. Và vì C# không cung cҩp thông tin vӅ các trҥng thái (behavior) hay sӵ thay ÿәi trҥng thái các ÿӕi tѭӧng trong thӡi gian thӵc thi (runtime) nên không thӇ cài ÿһt cѫ cҩu lѭu trӳ cӫa PERST hoàn toàn “trong suӕt” (transparent) ÿѭӧc (nghƭa là không thӇ truy xuҩt các ÿӕi tѭӧng ÿѭӧc Oѭu trӳ và không ÿѭӧc lѭu trӳ mӝt cách hoàn toàn giӕng nhau vì ta không thӇ phân biӋt ÿѭӧc khi nào ta ÿang truy xuҩt vào ÿӕi tѭӧng ÿѭӧc lѭu trӳ hay không ÿѭӧc lѭu trӳ). Thay cho sӵ cài ÿһt “trong suӕt” hoàn toàn, PERST ÿã Fӕ gҳng cung cҩp sӵ “trong suӕt” trong ÿa phҫn các trѭӡng hӧp. Giao diӋn IPersistent cung cҩp cho chúng ta phѭѫng thӭc recursiveLoading. Phѭѫng thӭc này mһc ÿӏnh ÿѭӧc cài ÿһt bҵng cách trҧ vӅ (return) giá trӏ true. Có nghƭa là PERST sӁ load (vào bӝ nhӟ chính) mӝt cách ÿӋ quy các ÿӕi tѭӧng ÿѭӧc tham chiӃu tӯ mӝt ÿӕi tѭӧng nguӗn khi ÿӕi tѭӧng nguӗn này ÿѭӧc load. Có nghƭa là cѫ chӃ này sӁ gây ra viӋc load ngҫm ÿӏnh toàn bӝ các ÿӕi tѭӧng vào bӝ nhӟ chính. Cѫ chӃ này tѭѫng tӵ cách làm viӋc Fӫa cѫ chӃ “chuӛi hóa” (serialization). ĈӇ tránh vҩn ÿӅ tràn bӝ nhӟ xҧy ra khi load ÿӕi tѭӧng lên bӝ nhӟ chính (do cѫ chӃ recursiveLoading gây ra), chúng ta phҧi quá tҧi (overload) phѭѫng thӭc recursiveLoading trong mӝt vài lӟp bҵng cách trҧ vӅ (return) giá trӏ false trong hàm. Các ÿӕi tѭӧng ÿѭӧc tham chiӃu tӯ các ÿӕi tѭӧng thuӝc các lӟp ÿã nói trên sӁ không ÿѭӧc load ngҫm ÿӏnh nӳa mà phҧi ÿѭӧc - 22 - load mӝt cách tѭӡng minh bҵng phѭѫng thӭc Persistent.Load. Vұy ta thҩy Uҵng phѭѫng thӭc recursiveLoading có thӇ dùng ÿӇ ÿLӅu khiӇn cách thӭc load các ÿӕi tѭӧng tӯ bӝ nhӟ phө vào bӝ nhӟ chính. /ѭu ý rҵng các ÿӕi tѭӧng dùng ÿӇ ”chӭa” các ÿӕi tѭӧng khác (container class) nhѭ Link,Relation,Index… chӍ load các ÿӕi tѭӧng mà nó chӭa khi cҫn thiӃt, không load tҩt cҧ theo cѫ chӃ recusiveLoading. Ngoài ra, viӋc truy xuҩt các ÿӕi tѭӧng thành phҫn cӫa mӝt lӟp kiӇu container ÿӅu thông qua các phѭѫng thӭc cӫa nó. PERST dùng phѭѫng thӭc khӣi tҥo mһc ÿӏnh (không có tham sӕ) ÿӇ khӣi Wҥo bѭӟc ban ÿҫu các ÿӕi tѭӧng ÿѭӧc load tӯ bӝ nhӟ phө. ĈLӅu này có nghƭa là: 1.Mӑi lӟp có khҧ năng lѭu trӳÿѭӧc (persistent capable class) ÿӅu nên có phѭѫng thӭc khӣi tҥo mһc ÿӏnh (hoһc là không có phѭѫng thӭc khӣi tҥo nào, khi ÿó trình biên dӏch sӁ tӵ tҥo ra cho ta). Phѭѫng thӭc này có thӇ có mӑi tҫm truy xuҩt có thӇÿѭӧc (public, private,protected … ). 2.Phѭѫng thӭc khӣi tҥo chӍ khӣi tҥo nhӳng thành phҫn không bӅn vӳng, không cҫn lѭu trӳ (transient) cӫa ÿӕi tѭӧng. 3.Phѭѫng thӭc khӣi tҥo mһc ÿӏnh dùng ÿӇ tҥo nhӳng thӇ hiӋn cӫa các ÿӕi Wѭӧng ÿѭӧc load tӯ bӝ nhӟ phө. Vұy tҥi thӡi ÿLӇm phѭѫng thӭc khӣi tҥo mһc ÿӏnh hoҥt ÿӝng các thành phҫn cӫa ÿӕi tѭӧng chѭa ÿѭӧc gán các giá trӏÿѭӧc Oѭu trӳ trong bӝ nhӟ phө. NӃu ta muӕn các thành phҫn này cNJng ÿѭӧc khӣi Wҥo nhѭ các thành phҫn transient nói trên, ta cҫn khӣi tҥo chúng trong hàm OnLoad, ÿѭӧc gӑi ngay khi các giá trӏ trong bӝ nhӟ phөÿѭӧc load lên bӝ nhӟ chính. - 23 - Tóm lҥi, các cѫ chӃ trên cho chúng ta sӵ thuұn tiӋn, dӉ dàng và mӅm dҿo trong lұp trình, vì nó không yêu cҫu lұp trình viên phҧi load tѭӡng minh các ÿӕi tѭӧng trong khi vүn cho phép viӋc này, nói cách khác là PERST hӛ trӧ Oұp trình viên trong viӋc kiӇm soát viӋc load các ÿӕi tѭӧng. ChӍ có các lӟp “chӭa” các ÿӕi tѭӧng khác là phҧi load tѭӡng minh các ÿӕi tѭӧng mà nó chӭa (vì các lӟp này ÿã mһc ÿӏnh ÿѭӧc overload phѭѫng thӭc recursiveLoadingÿӇ có giá trӏ trҧ vӅ (return) false). 2.2.3 Automatic scheme evaluation PERST hӛ trӧ “lazy automatic scheme evaluation”. Khi ÿӏnh nghƭa cӫa Pӝt lӟp bӏ thay ÿәi (thay ÿәi vӅ sӕ lѭӧng biӃn thành viên, thay ÿәi vӅ kiӇu Fӫa biӃn thành viên…), PERST sӁ chuyӇn các ÿӕi tѭӧng ÿã ÿѭӧc load sang ÿӏnh dҥng mӟi. NӃu ÿӕi tѭӧng ÿó trong quá trình hoҥt ÿӝng có thay ÿәi và Fҫn phҧi lѭu, nó sӁÿѭӧc lѭu dѭӟi dҥng mӟi. PERST có khҧ năng hӛ trӧ các kiӇu thay ÿәi ÿӏnh dҥng sau: 1.Các thay ÿәi “tѭѫng thích” lүn nhau giӳa các kiӇu dӳ liӋu vô Kѭӟng (thay ÿәi mà không cҳt bӟt dӳ liӋu). Ví dө nhѭ thay ÿәi tӯ kiӇu int sang float hay int sang long,… nhѭng ngѭӧc lҥi thì không ÿѭӧc. 2.Thay ÿәi thӭ tӵ các thành phҫn trong lӟp hay thêm, bӟt các thành phҫn trong lӟp này vào lӟp cha hay lӟp dүn xҩt cӫa nó. 3.Thêm vào hay bӓ lӟp khӓi cây thӯa kӃ cӫa lӟp. 4.Thay ÿәi ÿӏnh dҥng cӫa lӟp bҵng cách thay ÿәi ý nghƭa cӫa các giá trӏ. 0ӑi thay ÿәi khác trong cҩu trúc lӟp (ÿәi tên cho thành phҫn, chuyӇn kiӇu không tѭѫng thích ÿӕi vӟi các thành phҫn…) ÿӅu không ÿѭӧc quҧn lý bӣi cѫ - 24 - chӃ thay ÿәi cҩu trúc dӳ liӋu tӵÿӝng cӫa PERST. Trong các trѭӡng hӧp này ta có thӇ dùng cѫ chӃ xuҩt nhұp bҵng XML cӫa PERST. Cѫ sӣ dӳ liӋu có thӇ ÿѭӧc xuҩt ra dҥng XML bҵng cách dùng phѭѫng thӭc Storage.exportXML, Wҥo lҥi cѫ sӣ dӳ liӋu theo ÿӏnh dҥng mӟi rӗi nhұp dӳ liӋu vào bҵng phѭѫng thӭc Storage.importXML cӫa PERST. 2.2.4 Relation: 0ӕi quan hӋ mӝt-mӝt giӳa các ÿӕi tѭӧng trong cѫ sӣ dӳ liӋu ÿѭӧc thӇ hiӋn Eҵng tham chiӃu (references) trong C#. Nhѭng trong nhiӅu trѭӡng hӧp chúng ta cҫn ÿӃn quan hӋ mӝt-nhiӅu hay quan hӋ nhiӅu-nhiӅu. PERST cung cҩp giao diӋn (interface) Link dùng cho các trѭӡng hӧp này. Giao diӋn này ÿѭa ra các phѭѫng thӭc thêm, xóa, tìm kiӃm… các thành phҫn cӫa mӝt “bӝ” (relation) các ÿӕi tѭӧng persistent. Các thành phҫn cӫa “bӝ” (relation) này có thӇ ÿѭӧc truy xuҩt bҵng index hay ta có thӇ chuyӇn chúng thành mӝt Pҧng ÿӕi tѭӧng rӗi mӟi truy xuҩt. Tұp hӧp (relation) có 2 dҥng: 1. Dҥng “nhúng” (embedded relation): Các tham chiӃu ÿӃn các ÿӕi Wѭӧng tӯ mӝt ÿӕi tѭӧng ÿѭӧc chӭa trong chính ÿӕi tѭӧng ÿó. 2. Dҥng ÿӝc lұp (standalone relation): Khi ÿó relation là mӝt ÿӕi Wѭӧng riêng biӋt, chӭa các tham chiӃu ÿӃn các ÿӕi tѭӧng. Cҧ hai dҥng trên ÿӅu cài ÿһt giao diӋn Link. Cө thӇ Embedded relation ÿѭӧc tҥo bҵng cách dùng phѭѫng thӭc Storage.createLink, còn Standalone relation thì dùng phѭѫng thӭc Storage.createRelation. Bҧng sau ÿây minh hӑa các mӕi quan hӋ giӳa 2 lӟp A và B: - 25 - KiӇu quan hӋ Object A Object B 0ӝt-mӝt B bref; A aref; 0ӝt-nhiӅu Link bref; A aref; NhiӅu-mӝt B bref; Link aref; NhiӅu-nhiӅu Link bref; Link aref; %ҧng 2.2.4-1 Các mӕi quan hӋ giӳa 2 lӟp A va B 2.2.5 Index: Thông thѭӡng ÿӕi tѭӧng ÿѭӧc truy xuҩt tӯ mӝt ÿӕi tѭӧng khác bҵng tham chiӃu hay bҵng Link nhѭ trên. Tuy nhiên, chúng ta cNJng cҫn truy xuҩt các ÿӕi Wѭӧng thông qua khóa. Trong môi trѭӡng.NET, lӟp Hashtable là mӝt ví dө cho viӋc truy xuҩt theo khóa này. Ĉӕi vӟi cѫ sӣ dӳ liӋu, viӋc truy xuҩt ÿӕi Wѭӧng theo khóa dƭ nhiên là tѭѫng ÿӕi phӭc tҥp. Và viӋc cài ÿһt trong PERST Kҷn mӝt chӭc năng dӏch các câu truy vҩn SQL là không khҧ thi vì nó sӁ làm cho PERST phình to ra và chұm ÿi. Tuy nhiên trong phҫn lӟn trѭӡng hӧp, các ӭng dөng chӍ thӵc hiӋn các lӋnh truy vҩn dӳ liӋu tѭѫng ÿӕi ÿѫn giҧn nhѭ tìm theo mӝt khóa chính xác hay trong mӝt khoҧng giá trӏ nào ÿó. Trong PERST viӋc này ÿѭӧc thӵc hiӋn bҵng cách cài ÿһt các giao diӋn (interface) Index và FieldIndex. Giao diӋn Index dùng cho các khóa ÿӝc lұp và các giá trӏ tѭѫng ӭng cӫa khóa ÿó. Còn giao diӋn FieldIndex thì dùng ÿӇ lұp index cho các ÿӕi tѭӧng vӟi khóa chính là mӝt thành phҫn cӫa ÿӕi tѭӧng. Index ÿѭӧc tҥo trong PERST bҵng phѭѫng thӭc Storage.createIndexÿӕi Yӟi Index hay Storage.createFieldIndex ÿӕi vӟi FieldIndex. Có thӇ có vài cách cài ÿһt Index nhѭng hiӋn tҥi PERST chӍ dùng B+Tree ÿӇ cài ÿһt - 26 - (B+Tree là cҩu trúc dӳ liӋu hiӋu quҧ nhҩt cho database trên bӝ nhӟ phө). Các phѭѫng thӭc cӫa giao diӋn Index và FieldIndex cho phép thêm, xóa, tìm kiӃm ÿӕi tѭӧng theo khóa bҵng giá trӏ chính xác hoһc trong mӝt khoҧng giá trӏ nào ÿó. Vì vұy các trѭӡng hӧp tìm kiӃm sau ÿây là thӵc hiӋn ÿѭӧc: 1. Khóa bҵng giá trӏ VAL. 2. Khóa thuӝc khoҧng [MIN_VAL,MAX_VAL]. 3. Khóa thuӝc khoҧng [MIN_VAL,MAX_VAL). 4. Khóa thuӝc khoҧng (MIN_VAL,MAX_VAL]. 5. Khóa thuӝc khoҧng (MIN_VAL,MAX_VAL). 6. Khóa lӟn hѫn giá trӏ MIN_VAL. 7. Khóa lӟn hѫn hay bҵng giá trӏ MIN_VAL. 8. Khóa bé hѫn giá trӏ MAX_VAL. 9. Khóa bé hѫn hay bҵng giá trӏ MAX_VAL. Có mӝt sӕ cách chӑn ÿӕi tѭӧng theo khóa khác nhau nhѭ sau: a.IPersistent get(Key key): Chӑn ÿӕi tѭӧng bҵng khóa chính xác vӟi khóa này nên là khóa duy nhҩt cӫa ÿӕi tѭӧng. b.IPersistent[] get(Key from,Key till): Lҩy ra mӝt mҧng ÿӕi tѭӧng có khóa Qҵm trong mӝt khoҧng giá trӏ cho trѭӟc giӟi hҥn bӣi giá trӏ from và till. Trong ÿó from và till có thӇ mang giá trӏ tùy ý kӇ cҧ null. c.IEnumerator GetEnumerator(): Lҩy ra mӝt IEnumerator, có thӇ dùng câu lӋnh foreach ÿӇ duyӋt qua toàn bӝ các ÿӕi tѭӧng trong index này theo chiӅu tăng cӫa khóa. - 27 - d.IEnumerator GetEnumerator(Key from, Key till, IterationOrder order): /ҩy ra mӝt IEnumerator vӟi khóa nҵm trong khoҧng giá trӏ xác ÿӏnh bӣi from và till. Ta có thӇ duyӋt qua IEnumerator này vӟi chiӅu khóa tăng hay giҧm ÿӅu ÿѭӧc. 1Ӄu cҫn mӝt tұp hӧp các ÿӕi tѭӧng, chúng ta có thӇ sӱ dөng phѭѫng thӭc Storage.createSet. Tұp hӧp (set) ÿѭӧc cài ÿһt bҵng B+Tree vӟi object ID (OID) là khóa. Ngoài ra, PERST còn hӛ trӧ rҩt mҥnh cho dӳ liӋu “không gian” (spatial data) bҵng cách cung cҩp cҩu trúc SpatialIndex hӛ trӧ viӋc thêm, xóa, tìm kiӃm các ÿӕi tѭӧng “không gian” dӉ dàng. SpatialIndex ÿѭӧc cài ÿһt bҵng Fҩu trúc RTree cӫa Guttman vӟi thuұt toán “quadratic split” khá hiӋu quҧ trong viӋc tìm kiӃm các ÿӕi tѭӧng R2 (tìm kiӃm các ÿӕi tѭӧng không gian Yӟi khóa tìm kiӃm là các giá trӏ liên quan ÿӃn tӑa ÿӝ). Bҧng dѭӟi ÿây tóm tҳt các kiӇu Index ÿѭӧc PERST hӛ trӧ: Interface Mô tҧ KiӇu cӫa khóa Cài ÿһt Phѭѫng thӭc tҥo Index Index dùng tìm kiӃm Gӳ liӋu bҵng khóa chính xác hoһc nҵm trong mӝt khoҧng xác ÿӏnh. KiӇu vô Kѭӟng, chuӛi hay kiӇu tham chiӃu. B+Tree Storage.CreateIndex Index Nhѭ trên nhѭng áp Gөng cho trѭӡng KiӇu vô Kѭӟng, B+Tree Storage.CreateThinkI ndex - 28 - Kӧp có khóa trùng. chuӛi hay kiӇu tham hiӃu. FieldIndex Index vӟi khóa là Pӝt trong các trѭӡng cӫa lӟp ÿѭӧc Oұp Index. KiӇu vô Kѭӟng, chuӛi hay kiӇu tham chiӃu. B+Tree Storage.CreateFieldIn dex BitIndex BitIndex dùng tìm ÿӕi tѭӧng vӟi khóa cógiá trӏ nhӏ phân. KiӇu ÿӕi Wѭӧng có khҧ năng Oѭu trӳ. B+Tree Storage.CreaateBitInd ex ISet 7ұp hӧp các ÿӕi Wѭӧng có khҧ năng Oѭu trӳ. B+Tree Storage.CreateSet IPersisten tSet 7ұp hӧp các ÿӕi Wѭӧng có khҧ năng Oѭu trӳ ÿѭӧc và tұp Kӧp này có khҧ năng co giãn, có thӇ quҧn lý ÿѭӧc cҧ sӕ lѭӧng ít lүn sӕ lѭӧng nhiӅu. KiӇu ÿӕi Wѭӧng có khҧ năng Oѭu trӳ. Link hoһc B+Tree Storage.CreateScalabl eSet - 29 - SpatialInd ex Index dành cho dӳ liӋu không gian. Rectangle R-Tree Storage.CreateSpatialI ndex SpatialInd exR2 Index dành cho dӳ liӋu không gian nhѭng có tӑa ÿӝ thӵc. Rectangle R2 R-Tree Storage.CreateSpatialI ndexR2 SortedCol lection Index vӟi phép Toán so sánh do ngѭӡi dùng ÿӏnh nghƭa. 0ӑi kiӇu T-Tree Storage.CreateStorage Collection %ҧng 2.2.5-1 Các kiӇu Index ÿѭӧc PERST hӛ trӧ: 2.2.6 Giao tác (Transaction): Ӣÿây ta không ÿӏnh nghƭa lҥi chính xác giao tác là gì mà chӍ ÿѫn giҧn hình dung giao tác là mӝt tұp các lӋnh phҧi thӵc hiӋn và phҧi hoһc là thӵc hiӋn toàn bӝ các lӋnh ÿó hoһc là không lӋnh nào ÿѭӧc thӵc hiӋn cҧ. PERST cung cҩp tính năng bҧo vӋ sӵ nhҩt quán cӫa dӳ liӋu trong trѭӡng hӧp hӋ thӕng hay ӭng dөng có lӛi hay mҩt ÿLӋn phҧi tҳt ÿӝt ngӝt. Cѫ chӃ cài ÿһt giao tác sӁ giúp ta ÿҧm bҧo ÿLӅu này. Ĉӕi vӟi PERST, mӝt giao tác ÿѭӧc ngҫm ÿӏnh khӣi tҥo khi bҩt cӭ mӝt lӋnh update cѫ sӣ dӳ liӋu nào ÿѭӧc thӵc hiӋn và chҩm dӭt tѭӡng minh bҵng lӋnh commit, rollback hay close. ViӋc commit mӝt giao tác sӁ làm cho các trang (page) bӏ thay ÿәi trong quá trình thӵc hiӋn giao tác ÿѭӧc ghi vào bӝ nhӟ phөÿӗng bӝ (Asynchronous write: chѭѫng trình sӁ chӡ cho viӋc ghi vào ÿƭa xong mӟi làm tiӃp viӋc khác). Công viӋc này là công viӋc có chi phí rҩt cao. Trung bình viӋc ÿӏnh vӏ - 30 - ÿӕi vӟi các әÿƭa hiӋn ÿҥi là khoҧng 10ms, nghƭa là chӍ khoҧng 100 thao tác ÿӏnh vӏ trong 1 giây. Thêm vào ÿó các giao tác thѭӡng chӭa các thao tác update khoҧng vài trang cѫ sӣ dӳ liӋu nên trung bình chӍ còn khoҧng 10 giao tác mӛi giây. 0һc dù vұy, hiӋu suҩt thӵc thi sӁÿѭӧc nâng cao ÿáng kӇ khi ta hҥn chӃ sӕ Oҫn thӵc hiӋn lӋnh commit, có nghƭa là mӝt giao tác sӁ lӟn hѫn, thӵc hiӋn nhiӅu lӋnh hѫn. PERST dùng cѫ chӃ tҥo bóng (shadow mechanism) trong viӋc thӵc hiӋn giao tác. Khi mӝt ÿӕi tѭӧng ÿѭӧc thay ÿәi lҫn ÿҫu tiên trong Pӝt giao tác, mӝt bҧn copy (shadow) cӫa ÿӕi tѭӧng ÿó ÿѭӧc tҥo ra và ÿӕi Wѭӧng gӕc không thay ÿәi. Cho dù ÿӕi tѭӧng có ÿѭӧc thay ÿәi nhiӅu lҫn trong giao tác ÿó thì cNJng chӍ có mӝt bҧn copy cӫa ÿӕi tѭӧng ÿѭӧc tҥo ra. Nhѭ vұy cѫ chӃ này giúp PERST hoàn toàn không cҫn ÿӃn các tұp tin log trong cѫ sӣ dӳ liӋu thông thѭӡng và các giao tác dài không thӇ gây ra viӋc tràn log giao tác nhѭ các hӋ cѫ sӣ dӳ liӋu khác. Lѭu ý rҵng nӃu ta không gӑi OӋnh commit mӝt cách tѭӡng minh thì PERST sӁ chӍ hoҥt ÿӝng mӝt cách thông thѭӡng theo cѫ chӃ không hӛ trӧ giao tác. KhuyӃt ÿLӇm duy nhҩt cӫa viӋc giao tác dài hѫn bình thѭӡng là khҧ năng Pҩt ÿi nhiӅu sӵ thay ÿәi ÿã thӵc hiӋn ÿѭӧc trong giao tác nӃu giao tác hӓng hay hӋ thӕng gһp sӵ cӕ. Trong các trѭӡng hӧp nhѭ vұy, dӳ liӋu vүn ÿҧm bҧo tính nhҩt quán (consistency) nhѭng các thao tác thay ÿәi cѫ sѫ dӳ liӋu trong giao tác ÿó ÿӅu mҩt. - 31 - 2.3 Transparent API: 2.3.1 Dùng.NET Remoting API: .NET framework cung cҩp gói System.Runtime.Remoting nhҵm hӛ trӧ viӋc cài ÿһt các ӭng dөng phân tán. Ngѭӡi lұp trình chӍ cҫn dүn xuҩt các lӟp cӫa Kӑ tӯ lӟp ContextBoundObject và dùng ContextAttribute ÿӇ tҥo message sink: cѫ chӃ dùng ÿӇÿLӅu khiӇn viӋc gӑi hàm và truy xuҩt các thành phҫn cӫa ÿӕi tѭӧng. Dùng API này không nhӳng áp dөng cho các hӋ thӕng phân tán mà còn cho các hӋ thӕng dӵa trên giao thӭc metaobject (metaobject protocol): giao thӭc ÿLӅu khiӇn ÿӕi tѭӧng. Ví dө ta có thӇӭng dөng chúng ÿӇ cài ÿһt giao diӋn “trong suӕt” (transparent) cho cѫ sӣ dӳ liӋu hѭӟng ÿӕi Wѭӧng này, nghƭa là viӋc thao tác trên các ÿӕi tѭӧng persistent hoàn toàn bình thѭӡng nhѭ các ÿӕi tѭӧng khác. PERST.NET chӭa 2 lӟp PersistentContext và TransparentPersistentAttribute dùng tҥo tính “bӅn vӳng” mӝt cách “trong suӕt” cho các ÿӕi tѭӧng bҵng cách dùng.NET Remoting API. NӃu các lӟp cӫa ӭng dөng chúng ta ÿѭӧc dүn xuҩt tӯ lӟp PersistentContext và ÿѭӧc ÿánh dҩu Eҵng tính chҩt (attribute) TransparentPersistentAttribute, các thành phҫn cӫa nó sӁÿѭӧc load tӵÿӝng hay lѭu tӵÿӝng khi cҫn thiӃt (trѭӟc ÿây ta ÿӅu phҧi Wӵ làm các thao tác này). Vì hàm recursiveLoading trong lӟp PersistentContext trҧ vӅ false nên các ÿӕi tѭӧng sӁÿѭӧc load chӍ khi nào ta truy xuҩt nó. Tuy nhiên có 2 giӟi hҥn khi ta dùng remoting API: 1.Remoting API chӍ có thӇ áp dөng ÿӕi vӟi các thành phҫn có tҫm truy xuҩt public cӫa ÿӕi tѭӧng. - 32 - 2.Chi phí cӫa viӋc gӑi hàm thông qua remoting API cao gҩp khoҧng 100 Oҫn so vӟi gӑi hàm thông thѭӡng. 2.3.2 Dùng các thuӝc tính ҧo (virtual properties): Có mӝt ý tѭӣng khác tҥo nên sӵ “trong suӕt” cho PERST dӵa trên viӋc dùng các thuӝc tính ҧo (virtual properties). Không giӕng nhѭ Java, C# cung Fҩp cѫ chӃ cho phép ÿóng gói các thuӝc tính, thành phҫn cӫa mӝt lӟp. Ý Wѭӣng ban ÿҫu rҩt ÿѫn giҧn: Tҥo ra lӟp bao bӑc (wrapper class) sӁ cài ÿһt các thuӝc tính này. Nhѭ vұy lұp trình viên sӁÿѭӧc giҧi phóng khӓi nhiӅu viӋc nhӓ nhһt nhѭ không phҧi lo ÿӃn chuyӋn quá tҧi hàm recursiveLoading, hay Jӑi tѭӡng minh hàm LoadÿӇ load ÿӕi tѭӧng cNJng nhѭÿánh dҩu ÿӕi tѭӧng bӏ thay ÿәi bӣi hàm Modify nӳa…. Tuy nhiên cách này vүn có nhӳng hҥn chӃ Fӫa riêng nó: 1.Ĉӕi tѭӧng cӫa chúng ta không ÿѭӧc có các trѭӡng lѭu trӳ ÿѭӧc (persistent fields). Thay vì thӃ, ta phҧi ÿӏnh nghƭa các thuӝc tính trӯu Wѭӧng. C# cung cҩp cѫ chӃ cho phép ta dӉ dàng làm viӋc vӟi các thuӝc tính, nên viӋc lұp trình sӁÿӥ nһng nӅ hѫn. 2.Ta cNJng không thӇ tҥo ra các ÿӕi tѭӧng này bҵng toán tӱ new nhѭ bình thѭӡng. Ta phҧi dùng phѭѫng thӭc IStorage.CreateClass dùng ÿӇ tҥo Oӟp bao bӑc và tҥo ra ÿӕi tѭӧng cӫa lӟp này. Lӟp này cNJng không có hàm khӣi tҥo nào khác ngoài hàm khӣi tҥo mһc ÿӏnh, và hàm khӣi tҥo mһc ÿӏnh này cNJng không làm gì khác ngoài viӋc khӣi tҥo các thành phҫn không ÿѭӧc lѭu trӳ (vì hàm khӣi tҥo này sӁ ÿѭӧc gӑi mӛi khi ÿӕi tѭӧng ÿѭӧc load tӯ bӝ nhӟ phө). - 33 - 3.Ta cNJng không thӇ có thành phҫn cӫa ÿӕi tѭӧng là mҧng các tham chiӃu ÿӃn các ÿӕi tѭӧng khác. Ta phҧi dùng PERST.PArrayÿӇ thay thӃ. 4.Sӵ phát sinh lӟp bao bӑc nhѭ vұy có chi phí cao, làm giҧm hiӋu suҩt chѭѫng trình nӃu có nhiӅu lӟp. 5.Cuӕi cùng, cѫ chӃ này không ÿѭӧc hӛ trӧ trong môi trѭӡng .NET Compact framework do môi trѭӡng này không hӛ trӧ viӋc tҥo mã trong thӡi gian thӵc thi (runtime). 2.4 &ѫ chӃ thӵc hiӋn giao tác (Transaction): 0ӛi record hay ÿӕi tѭӧng trong PERST có duy nhҩt mӝt sӕÿӏnh danh gӑi là OID. OIDÿѭӧc dùng ÿӇ tham chiӃu giӳa các ÿӕi tѭӧng vӟi nhau. ĈӇÿӏnh Yӏ chính xác mӝt ÿӕi tѭӧng bҵng tham chiӃu, OID cӫa chúng ÿѭӧc dùng nhѭ chӍ sӕ trong mҧng các ÿӏa chӍ (offset) cӫa các ÿӕi tѭӧng trong database. 0ҧng này ÿѭӧc gӑi là mҧng chӍ mөc ÿӕi tѭӧng (object index) và mӛi thành phҫn cӫa mҧng này ÿѭӧc gӑi là mӝt mөc quҧn ÿӕi tѭӧng (object handle), giӳ ÿӏa chӍ trong database cӫa ÿӕi tѭӧng. Có 2 bҧn cӫa mҧng chӍ mөc ÿӕi tѭӧng trong PERST, mӝt là mҧng “hiӋn hành” (current) và mҧng còn lҥi gӑi là Pҧng “bóng” (shadow) cӫa mҧng này. Header cӫa database giӳ con trӓÿӃn Fҧ hai mҧng này và có mӝt biӃn chӍÿӏnh (indicator) ÿâu là mҧng “hiӋn hành” vào thӡi ÿLӇm hiӋn tҥi. Khi mӝt ÿӕi tѭӧng bӏ thay ÿәi lҫn ÿҫu tiên, ÿӕi tѭӧng ÿó sӁÿѭӧc copy ra Pӝt bҧn khác và mөc quҧn cӫa ÿӕi tѭӧng trong mҧng chӍ mөc ÿӕi tѭӧng “hiӋn hành” sӁ chuyӇn sang trӓ vào bҧn copy cӫa ÿӕi tѭӧng này còn mөc quҧn ÿӕi tѭӧng trong mҧng chӍ mөc ÿӕi tѭӧng “bóng” vүn trӓ vào ÿӕi tѭӧng Jӕc. Tҩt cҧ các thay ÿәi ÿӅu ÿѭӧc làm trên bҧn copy và bҧn gӕc ÿѭӧc giӳ - 34 - nguyên trҥng. PERST sӁÿánh dҩu trong trang Bitmap cӫa mҧng chӍ mөc ÿӕi Wѭӧng chӭa con trӓÿӃn ÿӕi tѭӧng bӏ thay ÿәi. Lúc giao tác (transaction) ÿѭӧc hoàn tҩt và lӋnh commit ÿѭӧc thӵc hiӋn, ÿҫu tiên PERST sӁ kiӇm tra xem kích thѭӟc cӫa mҧng chӍ mөc ÿӕi tѭӧng có Wăng hay không. NӃu có, PERST cNJng sӁ tăng kích thѭӟc cho mҧng chӍ mөc ÿӕi tѭӧng “bóng”. KӃÿӃn PERST sӁ giҧi phóng các vùng nhӟÿѭӧc dùng bӣi các ÿӕi tѭӧng gӕc, chính là các ÿӕi tѭӧng gӕc mà trѭӟc ÿây ÿã dùng chúng ÿӇ tҥo ra các bҧn copy. Các vùng nhӟ này không thӇÿѭӧc giҧi phóng trѭӟc khi giao tác commit vì nhѭ vұy có thӇ PERST sӁ cҩp phát cho các ÿӕi tѭӧng Pӟi ÿúng các vùng nhӟÿó, trong khi chúng ta muӕn các ÿӕi tѭӧng gӕc chӭa trong vùng nhӟ này không ÿәi. ĈLӅu này ҧnh hѭӣng ÿӃn tính nhҩt quán cӫa Fѫ sӣ dӳ liӋu. Vì viӋc giҧi phóng vùng nhӟ trong PERST cNJng ÿѭӧc thӵc hiӋn thông qua Bitmap nên khi giҧi phóng cҫn phҧi làm trӕng mӝt sӕ bit trong trang Bitmap tѭѫng ӭng vӟi các vùng nhӟ cҫn xóa. Mà các trang Bitmap này cNJng ÿѭӧc copy trѭӟc khi sӵ thay ÿәi xҧy ra. ViӋc copy các trang Bitmap này cNJng ÿòi hӓi vùng nhӟ, và ta có thӇ cNJng dùng các vùng nhӟ cӫa các ÿӕi tѭӧng bӏ giҧi phóng nhѭ trên. Rõ ràng ÿLӅu này lҥi vi phҥm tính nhҩt quán cӫa cѫ sӣ dӳ liӋu theo nhѭ lý do vӯa nêu. Tҩt cҧ nhӳng ÿLӅu trên chính là lý do tҥi sao viӋc giҧi phóng vùng nhӟ trong PERST ÿѭӧc chia thành hai bѭӟc. Ĉҫu tiên, khi ÿӕi tѭӧng ÿѭӧc copy, tҩt cҧ các trang Bitmap Wѭѫng ӭng vӟi vùng nhӟ cӫa ÿӕi tѭӧng cNJng ÿѭӧc copy theo (nӃu trѭӟc ÿó chѭa ÿѭӧc copy). Khi giao tác commit, PERST chӍ viӋc làm trӕng các bit trong các trang Bitmap tѭѫng ӭng và tҥi thӡi ÿLӇm này, không có mӝt yêu Fҫu vӅ cҩp phát bӝ nhӟ nào ÿѭӧc phép phát sinh. - 35 - Sau khi giҧi phóng các vùng nhӟ thuӝc vӅ các ÿӕi tѭӧng gӕc, PERST sӁ ÿӗng loҥt ghi các trang bӏ thay ÿәi lên ÿƭa ÿӇÿӗng bӝ thông tin trên bӝ nhӟ chính và trên ÿƭa. Sau ÿó PERST sӁ chuyӇn ÿәi giá trӏ biӃn chӍ ÿӏnh (indicator) chӍ ra mҧng chӍ mөc ÿӕi tѭӧng hiӋn tҥi trong database thành giá trӏ chӍÿӃn mҧng “bóng” ÿӇ chuyӇn ÿәi vai trò giӳa hai mҧng. Bây giӡ mҧng chӍ mөc ÿӕi tѭӧng hiӋn tҥi chuyӇn thành “bóng” và mҧng chӍ mөc ÿӕi tѭӧng “bóng” sӁ trӣ thành mҧng hiӋn tҥi. TiӃp theo mӝt lҫn nӳa PERST sӁ ghi trang chӭa header bӏ thay ÿәi cӫa database lên ÿƭa, chuyӇn database sang trҥng thái nhҩt quán mӟi. Cuӕi cùng PERST sӁ copy tҩt cҧ các mөc quҧn ÿӕi tѭӧng bӏ thay ÿәi tӯ mҧng chӍ mөc ÿӕi tѭӧng “bóng” (trѭӟc ÿây là hiӋn tҥi) sang mҧng chӍ mөc ÿӕi tѭӧng hiӋn tҥi (trѭӟc kia là mҧng “bóng”). Vào thӡi ÿLӇm này, Qӝi dung cӫa cҧ hai mҧng chӍ mөc ÿӕi tѭӧng ÿã ÿӗng nhҩt và PERST có thӇ Eҳt ÿҫu mӝt giao tác mӟi. Bitmap cӫa các ÿӕi tѭӧng bӏ thay ÿәi có tác dөng giҧm thӡi gian commit giao tác. Không phҧi tҩt cҧ mҧng chӍ mөc ÿѭӧc copy mà chӍ có các trang bӏ thay ÿәi mӟi ÿѭӧc copy, Sau khi giao tác commit, Bitmap ÿѭӧc làm trӕng nhѭÿã nói ӣ trên. Khi giao tác ÿѭӧc bӓ, không cho thӵc hiӋn nӳa bҵng lӋnh Storage.rollback Pӝt cách tѭӡng minh, mҧng chӍ mөc ÿӕi tѭӧng “bóng” sӁÿѭӧc copy ngѭӧc Oҥi vào mҧng chӍ mөc ÿӕi tѭӧng hiӋn tҥi, có nghƭa là các thay ÿәi nӃu có trѭӟc ÿó ÿӅu không có hiӋu lӵc. Sau khi copy, hai mҧng chӍ mөc lҥi ÿӗng nhҩt và cѫ sӣ dӳ liӋu lҥi trӣ vӅ trҥng thái nhҩt quán trѭӟc khi thӵc hiӋn giao tác. 6ӵ cҩp phát vùng nhӟ cho các mөc quҧn ÿӕi tѭӧng ÿѭӧc thӵc hiӋn bҵng freehandle list. Header cӫa list cNJng ÿѭӧc copy và cҧ hai bҧn cӫa header này - 36 - cùng ÿѭӧc lѭu trên header cӫa database. Sӵ chuyӇn qua lҥi giӳa hai bҧn này ÿѭӧc thӵc hiӋn tѭѫng tӵ nhѭ viӋc chuyӇn qua lҥi giӳa hai mҧng chӍ mөc ÿӕi Wѭӧng. Khi không còn chӛ trӕng trong mҧng chӍ mөc ÿӕi tѭӧng, mҧng sӁ ÿѭӧc cҩp phát thêm. Mҧng chӍ mөc ÿӕi tѭӧng là thӭ duy nhҩt trong cѫ sӣ dӳ liӋu không ÿѭӧc copy trong quá trình thay ÿәi. Thay vì thӃ, PERST luôn luôn Vӱ dөng hai bҧn cӫa mҧng này (mӝt bҧn hiӋn tҥi và mӝt bҧn “bóng”). Có mӝt vài giá trӏ OID ÿѭӧc dành riêng cho các ÿӕi tѭӧng ÿһc biӋt trong PERST. Giá trӏ OID 0 dùng cho các ÿӕi tѭӧng không hӧp lӋ ví dө nhѭ các ÿӕi tѭӧng ÿã bӏ xóa. Các giá trӏ OID bҳt ÿҫu tӯ 1 ÿѭӧc dùng cho các trang Bitmap. Sӕ trang Bitmap lҥi tùy thuӝc vào lѭӧng bӝ nhӟҧo tӕi ÿa cӫa cѫ sӣ Gӳ liӋu. Ví dө vӟi 1tetrabyte bӝ nhӟҧo thì kích thѭӟc trang 8Kb, kích thѭӟc ÿѫn vӏ vùng nhӟ cҩp phát (allocation quantum) 64 byte và 32K trang Bitmap là các sӕ liӋu tѭѫng ӭng. Có nghƭa là 32K mөc quҧn ÿӕi tѭӧng ÿѭӧc dành riêng cho các trang Bitmap trong mҧng chӍ mөc ÿӕi tѭӧng. Các trang Bitmap ÿѭӧc cҩp phát khi cҫn thiӃt khi mà kích thѭӟc database tăng lên. Theo các sӕ liӋu trên thì rõ ràng ÿӕi tѭӧng cӫa ngѭӡi dùng ÿҫu tiên sӁ mang giá trӏ OID Eҵng 0x8002 (tӭc là 32K + 2). Quá trình phөc hӗi cѫ sӣ dӳ liӋu trong PERST cNJng ÿѫn giҧn. Khi ta mӣ Fѫ sӣ dӳ liӋu, PERST sӁ kiӇm tra xem cѫ sӣ dӳ liӋu trѭӟc ÿó có ÿѭӧc ÿóng ÿúng cách không. NӃu không (cӡ dirty ÿѭӧc bұt lên trong header cӫa database), PERST sӁ thӵc hiӋn viӋc phөc hӗi (tѭѫng tӵ nhѭ cѫ chӃ rollbachk ÿã ÿӅ cұp phía trên). PERST sӁ làm nhѭ sau: BiӃn chӍÿӏnh chӍ ra mҧng chӍ mөc ÿӕi tѭӧng hiӋn tҥi sӁÿѭӧc PERST dùng ÿӇ quyӃt ÿӏnh xem mҧng nào là mҧng tѭѫng ӭng vӟi trҥng thái nhҩt quán. Khi ÿó, PERST sӁ copy các mөc quҧn ÿӕi tѭӧng trong mҧng này sang mҧng - 37 - còn lҥi, các thay ÿәi thӵc hiӋn trѭӟc ÿó nӃu có ÿӅu không cón hiӋu lӵc, PERST lҥi trӣ vӅ vӟ trҥng thái nhҩt quán. Thұt sӵ quá trình recovery chӍ làm chuyӋn copy trên (chӍ nhӳng mөc quҧn có giá trӏ khác nhau trên hai mҧng chӍ mөc ÿӕi tѭӧng mӟi ÿѭӧc copy ÿӇ giҧm Vӕ trang cҫn ghi lên ÿƭa) và kích thѭӟc cӫa mҧng chӍ mөc ÿӕi tѭӧng cNJng nhӓ nên viӋc phөc hӗi diӉn ra rҩt nhanh. ĈLӅu này giúp giҧm thӡi gian “out-of- service” cӫa ӭng dөng. 2.5 Nhӳng trѭӡng hӧp nên dùng PERST: PERST là cѫ sӣ dӳ liӋu dành cho lұp trình tѭѫng ÿӕi ÿѫn giҧn và nhanh. 1Ӄu ӭng dөng cӫa chúng ta cҫn có cѫ sӣ dӳ liӋu ÿѫn, không thӵc hiӋn nhӳng thao tác truy xuҩt dӳ liӋu quá “lҳt léo” và cái chúng ta cҫn là khҧ năng lѭu trӳ, truy xuҩt, ÿӏnh vӏ các ÿӕi tѭӧng trong cѫ sӣ dӳ liӋu thông qua tham chiӃu hay qua khóa thì PERST rҩt thích hӧp. Trong các trѭӡng hӧp này PERST sӁ có hiӋu năng làm viӋc tӕt hѫn so vӟi các cѫ sӣ dӳ liӋu quan hӋ hay các cѫ sӣ Gӳ liӋu hѭӟng ÿӕi tѭӧng phӭc tҥp hѫn khác. Ta sӁÿLӇm qua lҥi các tính năng nәi bұt cӫa PERST: 1.KӃt hӧp chһt chӁ, tӵ nhiên vӟi mӝt sӕ ngôn ngӳ lұp trình thông dөng nhҩt ÿӏnh (HiӋn tҥi chӍ mӟi hӛ trӧ Java và C#). 2.Mô hình dӳ liӋu trong ӭng dөng và database gҫn nhѭ tѭѫng tӵ nhau. 3.DӉ dàng sӱ dөng. 4.Yêu cҫu không cao (PERST package chӍ có dung lѭӧng 51Kb và PERST có thӇÿѭӧc cҩu hình lҥi sao cho có thӇ dùng ít bӝ nhӟ chính và phө khi làm viӋc). - 38 - 5.HiӋu năng cao (không có các chi phí cho viӋc truyӅn thông, khóa, phân tích cú pháp các câu SQL và thӵc hiӋn các câu truy vҩn). 6.Khҧ năng chӏu lӛi tӕt (cѫ chӃ thӵc hiӋn giao tác). 7.Khҧ năng phөc hӗi nhanh chóng khi gһp sӵ cӕ. 8.Không cҫn phҧi quҧn lý database nhiӅu vì database chӍ bao gӗm mӝt file duy nhҩt, viӋc các file log cӫa database quá lӟn sӁ không còn nӳa, hiӋu Qăng làm viӋc sӁ tăng cao. 'ƭ nhiên, PERST cNJng có các khuyӃt ÿLӇm tѭѫng ӭng: 1. Không hӛ trӧ ngôn ngӳ truy vҩn. 2. Không thích hӧp cho viӋc hӛ trӧÿa ngѭӡi dùng truy cұp database (NӃu muӕn chúng ta phҧi tӵ thiӃt kӃ mӝt server riêng, server này sӁ nhұn các yêu cҫu tӯ client rӗi tuҫn tӵ truy xuҩt database rӗi mӟi gӱi kӃt quҧ vӅ cho client). 3. Không hӛ trӧ viӋc phân tán dӳ liӋu. 4. Không tuân theo mӝt chuҭn nào cҧ (Ví dө không tuân theo chuҭn ODMG). 2.6 Các thông sӕ cӫa PERST: Phҫn này chúng ta sӁ xem xét sâu hѫn vӅ các thông sӕ cӫa database và các cách sӱ dөng chúng ÿӇ tăng hiӋu năng. 7ӕc ÿӝ truy xuҩt ÿƭa là rҩt chұm so vӟi tӕc ÿӝ truy xuҩt bӝ nhӟ chính. Vì Yұy lѭu giӳ các dӳ liӋu ÿѭӧc truy xuҩt thѭӡng xuyên (data caching) là chìa khóa chính ÿӇ tăng hiӋu năng làm viӋc cӫa cѫ sӣ dӳ liӋu. PERST dùng “ pool of pages” ÿӇ tӕi ѭu hóa viӋc truy cұp ÿƭa. Kích thѭӟc cӫa page pool có thӇ - 39 - ÿѭӧc xác ÿӏnh trong phѭѫng thӭc Storage.Open khi mӣ database (giá trӏ mһc ÿӏnh cӫa thông sӕ này là 4Mb). Thông thѭӡng tăng kích thѭӟc page pool sӁ Wăng hiӋu năng làm viӋc cӫa chѭѫng trình. Nhѭng chúng ta phҧi lѭu ý nhӳng ÿLӇm sau trѭӟc khi quyӃt ÿӏnh có tăng kích thѭӟc page pool hay không. 1. Có thӇӭng dөng chӍÿѭӧc cҩp mӝt lѭӧng nhҩt ÿӏnh memory nào ÿó khi làm viӋc thôi. 2. NӃu chúng ta tҥo ra page pool có kích thѭӟc quá lӟn, không ÿӇ lҥi ÿӫ chӛ cho hӋÿLӅu hành và các ӭng dөng khác làm viӋc thì toàn bӝ hӋ thӕng VӁ bӏҧnh hѭӣng chung, sӁ giҧm hiӋu năng do hӋ thӕng phҧi swap bӝ nhӟ liên tөc. 3. Bҧn thân hӋ ÿLӅu hành cNJng có cѫ chӃ cache dӳ liӋu cӫa riêng mình Eҵng file buffer. Vұy dӳ liӋu thұt sӵÿѭӧc cache hai lҫn. Tuy nhiên viӋc truy xuҩt dӳ liӋu tӯ page pool sӁ nhanh hѫn do không phҧi có các lӋnh gӑi hàm hӋ thӕng cNJng nhѭ chuyӇn ngӳ cҧnh (switch context) khi gӑi hàm. 4. ViӋc tҥo page pool có kích thѭӟc quá nhӓ hoһc thұm chí bҵng 0 (giao viӋc cache data toàn bӝ cho hӋÿLӅu hành) cNJng không thӇ vì sӁ gây ra lӛi. Khi dӳ liӋu ÿѭӧc truy cұp tӯ bӝ nhӟ phө, nó sӁÿѭӧc ÿѭa lên chӭa trong page pool. Có nghƭa là page pool phҧi ÿѭӧc thiӃt lұp cho ÿӫ lӟn ÿӇ có thӇ chӭa ÿѭӧc các trang này. Vì vұy, không nên tҥo page pool có kích thѭӟc bé hѫn 64kb. 1Ӄu chúng ta nghƭ rҵng mӑi dӳ liӋu nên ÿӇ hӃt trong bӝ nhӟ chính, chúng ta có thӇ dùng hҵng sӕ Storage.INFINITE_PAGE_POOL trong phѭѫng thӭc Storage.Open cӫa database. Trong trѭӡng hӧp này, page pool sӁ tӵ ÿӝng ÿѭӧc tăng kích thѭӟc mӛi khi có mӝt trang mӟi cҫn ÿѭa vào bӝ nhӟ chính. - 40 - Có nghƭa là lҫn lѭӧt mӑi trang sӁ ÿѭӧc cache và hiӋn diӋn trong bӝ nhӟ chính, chúng chӍÿѭӧc ÿӑc tӯ bӝ nhӟ phө lҫn ÿҫu tiên thôi. Trong trѭӡng hӧp này “strong object cache” sӁ ÿѭӧc dùng thay vì “weak object cache”. Có nghƭa là ÿӕi tѭӧng ÿѭӧc lҩy ra tӯ cѫ sӣ dӳ liӋu sӁ ÿѭӧc lѭu trong bӝ nhӟ chính và ÿӕi tѭӧng chӍÿѭӧc cҫn ÿѭӧc ÿӑc mӝt lҫn thôi. Chúng ta cNJng cҫn Oѭu ý rҵng kích thѭӟc database trong bӝ nhӟ chính sӁ lӟn hѫn trên bӝ nhӟ phө vì các ÿӕi tѭӧng sӁ tӗn tҥi trong bӝ nhӟ chính dѭӟi cҧ hai dҥng: Dҥng “gӕc”(packed: trong trang chӭa ÿӕi tѭӧng) và dҥng “ÿã có hình dáng” (unpacked: tham chiӃu tӯ bӝ cach ÿӕi tѭӧng). Trong mӝt vài ӭng dөng (nhѭ các ӭng dөng trên các thiӃt bӏ di ÿӝng), khҧ Qăng lѭu trӳ là không cҫn thiӃt nhѭng các lӟp bao chӭa (container class) cӫa PERST nhѭ Link, Index, FieldIndex, SpatialIndex… vүn có thӇÿѭӧc dùng. Trong trѭӡng hӧp này ta sӁ dùng cài ÿһt NullFile cӫa interface IFile cùng vӟi thông sӕ Storage.INFINITE_PAGE_POOL ÿӇ tҥo ra “database” trong bӝ nhӟ chính. Data trong trѭӡng hӧp này sӁ không phҧi ghi vào bӝ nhӟ phө. Có mӝt vài hҵng sӕ ÿѭӧc ÿӏnh nghƭa sҹn trong lӟp StorageImpl có ҧnh Kѭӣng ÿӃn kích thѭӟc khӣi ÿҫu và kích thѭӟc tӕi ÿa cӫa database. NӃu ta muӕn thay ÿәi các thông sӕ này, ta sӁ phҧi biên dӏch lҥi PERST. Thông sӕ Giá trӏ Pһc ÿӏnh Mô tҧ dbDefaultInitTi ndexSize 1024 Kích thѭӟc khӣi ÿҫu cӫa mҧng chӍ mөc ÿӕi tѭӧng. 0ҧng này sӁÿѭӧc tăng kích thѭӟc khi cҫn thiӃt. ViӋc cҩp phát lҥi vùng nhӟ cho mҧng này có chi - 41 - phí cao nên ÿӇ hҥn chӃ tác vө này, kích thѭӟc cӫa Pҧng chӍ mөc ÿӕi tѭӧng luôn ÿѭӧc cҩp phát dӵ trӳ gҩp ÿôi. Vұy viӋc cҩp phát vùng nhӟ cho Pҧng chӍ mөc ÿӕi tѭӧng lӟn hѫn sӁ giúp tăng hiӋu Qăng chѭѫng trình mӝt ít nhѭng bù lҥi sӁ làm tăng kích thѭӟc khӣi ÿҫu cӫa database. Vӟi giá trӏ mһc ÿӏnh cӫa thông sӕ này, kích thѭӟc ban ÿҫu cӫa database mӟi tҥo là khoҧng 50Kb dbDefaultExten sionQuantum 4Mb Ĉây chính là kích thѭӟc cҩp phát vùng nhӟ thêm trong PERST. Bӝ nhӟÿѭӧc cҩp phát bҵng cách quét Bitmap. NӃu không có ÿӫ chӛ trӕng liên tiӃp cho ÿӕi tѭӧng, database sӁÿѭӧc tăng kích thѭӟc Eҵng giá trӏ dbDefaultExtensionQuantum. Tăng giá trӏ cӫa tông sӕ này dүn ÿӃn viӋc PERST ít phҧi scan lҥi Bitmap tӯÿҫu, tӕc ÿӝ cӫa mӛi lҫn cҩp phát bӝ nhӟ sӁ tăng và các ÿӕi tѭӧng ÿѭӧc cҩp phát sӁ có nhiӅu cѫ hӝi nҵm liên tiӃp nhau hѫn. Nhѭ vұy sӁ dӉ tăng hiӋu năng chѭѫng trình nhѭng ngѭӧc lҥi ÿây có thӇ là mӝt sӵ sӱ dөng bӝ nhӟ không hiӋu quҧ. Và viӋc giҧm giá trӏ này sӁ gây tác dөng ngѭӧc lҥi ÿӕi vӟi nhӳng tác dөng khi Wăng nó. dbObjectCacheI nitSize 1319 Kích thѭӟc cӫa vùng cache ÿӕi tѭӧng. PERST dùng vùng này ÿӇ kiӇm tra xem liӋu ÿӕi tѭӧng vӟi Vӕ OID nào ÿó ÿã hiӋn diӋn trên bӝ nhӟ chính hay - 42 - chѭa. Vùng cache này dùng “weak reference” ÿӇ Eӝ dӑn rác có thӇ làm nhiӋm vө. Mӛi khi cache bӏ ÿҫy, cache sӁÿѭӧc cҩp phát lҥi vӟi kích thѭӟc khoҧng gҩp ÿôi lҫn trѭӟc. Mӝt lҫn nӳa, nӃu ta Wăng thông sӕ này thì sӁ làm giҧm sӕ lҫn phҧi cҩp phát lҥi vùng nhӟ cache. %ҧng 2.6-1 Hҵng sӕÿѭӧc ÿӏnh nghƭa sҹn trong lӟp StorageImpl 'ѭӟi ÿây là các cách ÿӇ tăng hiӋu năng và giҧm lѭӧng bӝ nhӟ chính phҧi Vӱ dөng. NӃu chѭѫng trình cӫa chúng ta thӵc hiӋn nhiӅu thao tác update các ÿӕi tѭӧng trên cѫ sӣ dӳ liӋu thì giӟi hҥn chính là thӡi gian ghi ÿƭa. NӃu chúng ta thӵc hiӋn lӋnh commit database mӛi khi có sӵ thay ÿәi thì trung bình ta thӵc hiӋn ÿѭӧc 10 lҫn commit nhѭ vұy trong mӝt giây (Giӟi hҥn này giҧ thiӃt rҵng mӛi thao tác truy cұp ÿƭa mҩt 10ms và mӛi giao tác khi commit Fҫn ghi xuӕng ÿƭa khoҧng 10 trang bҩt kǤ trong cѫ sӣ dӳ liӋu). Nhѭng ta có thӇ tăng hiӋu năng cӫa thao tác update mӝt cách ÿáng kӇ nӃu ta nhóm các thao tác update lҥi vӟi nhau trong cùng mӝt giao tác. PERST tҥo ÿӕi tѭӧng copy cӫa các ÿӕi tѭӧng cҫn update khi lҫn ÿҫu tiên nó bӏ thay ÿәi trong giao tác. NӃu ÿӕi tѭӧng bӏ update trong N giao tác mӛi giao tác mӝt lҫn thì N bҧn copy sӁÿѭӧc tҥo nhѭng nӃu ÿӕi tѭӧng bӏ update N lҫn trong mӝt giao tác thì chӍ mӝt bҧn copy ÿѭӧc tҥo ra. Ĉây chính là lӧi ích dӉ thҩy nhҩt cӫa viӋc thӵc hiӋn các giao tác lӟn, dài. Nhѭng nӃu ta thӵc hiӋn viӋc update cho nhiӅu ÿӕi tѭӧng trong cùng mӝt giao tác thì rõ ràng sӁ dүn ÿӃn viӋc tăng kích thѭӟc database vì các bҧn copy các ÿӕi tѭӧng ÿѭӧc tҥo ra nhiӅu mà viӋc giҧi phóng vùng nhӟ cNJ chӍÿѭӧc thӵc hiӋn khi commit giao tác. Vì vұy, cách tӕt nhҩt (mӝt cách tѭѫng ÿӕi) là - 43 - thӵc hiӋn lӋnh commit sau khoҧng 100 ÿӃn 1000 lҫn update, làm nhѭ vұy sӁ giҧm ÿѭӧc chi phí cӫa mӛi lҫn commit mà vүn không làm tăng kích thѭӟc database ÿáng kӇ. 1Ӄu các ÿӕi tѭӧng cӫa chѭѫng trình ÿѭӧc tә chӭc dѭӟi dҥng cây hay danh sách liên kӃt thì mӝt khi ta ÿã load lên bӝ nhӟ chính ÿӕi tѭӧng gӕc cӫa cây hay danh sách liên kӃt và ÿӕi tѭӧng ÿó ÿѭӧc tham chiӃu tӯ mӝt biӃn cӫa chѭѫng trình thì bӝ dӑn rác sӁ không thӇ nào thu dӑn ÿѭӧc bҩt cӭÿӕi tѭӧng nào ÿѭӧc load lên tӯÿӕi tѭӧng gӕc (vì ÿӕi tѭӧng ÿó có thӇÿѭӧc tham chiӃu Wӯÿӕi tѭӧng gӕc bҩt cӭ lúc nào). Cӭ nhѭ vұy khi ta truy xuҩt lҫn lѭӧt cho ÿӃn hӃt các ÿӕi tѭӧng trong cây hay danh sách liên kӃt ÿó thì toàn bӝ các ÿӕi Wѭӧng sӁ nҵm trong bӝ nhӟ chính. ĈLӅu này có thӇ dүn ÿӃn sӵ tràn bӝ nhӟ. Vì Yұy ta nên cҭn thұn, không nên ÿӇ mӝt biӃn nào ÿó tham chiӃu ÿӃn ÿӕi tѭӧng Jӕc cӫa cây mà không quҧn lý chһt. Tuy nhiên, vӟi các lӟp bao chӭa cӫa PERST, truy xuҩt các ÿӕi tѭӧng bҵng khóa nhѭ Index, SpatialIndex, FieldIndex… thì lo lҳng này là không cҫn thiӃt vì các ÿӕi tѭӧng thành phҫn Fӫa các ÿӕi tѭӧng này sӁ bӏ bӝ don rác thu gom bình thѭӡng. Ĉôi ÿLӅu ghi chú thêm: Khi nào thì nên dùng cҩu trúc nào cho viӋc lѭu trӳ: 1. Link: Dùng cho các tұp hӧp nhӓ (sӕÿӕi tѭӧng trong tұp hӧp khoҧng 100 trӣ xuӕng). 2. FieldIndex: Dùng cho các tұp hӧp có sӕ phҫn tӱ lӟn (khoҧng hѫn 100). ChӍ mөc ÿѭӧc tҥo trên mӝt trѭӡng cӫa ÿӕi tѭӧng hay nhiӅu trѭӡng (trong trѭӡng hӧp này ÿѭӧc gӑi là khóa phӭc) cӫa ÿӕi tѭӧng. FieldIndex ÿѭӧc cài - 44 - ÿһt bҵng B+Tree. Kích thѭӟc trang BTree là 4kb, vì vұy kích thѭӟc nhӓ nhҩt ÿѭӧc dùng bӟi index là 4kb. 3. Index: CNJng dùng cho các tұp hӧp có sӕ phҫn tӱ lӟn. ViӋc ÿánh chӍ mөc cho Index ÿѭӧc thӵc hiӋn ngay lúc thêm ÿӕi tѭӧng vào Index. 4. BitIndex: dùng cho tұp hӧp các ÿӕi tѭӧng vӟi khóa là các trѭӡng có giá trӏ nhӏ phân. 5. SpatialIndex: dùng cho dӳ liӋu không gian vӟi khóa là tӑa ÿӝ cӫa các ÿӕi tѭӧng. SpatialIndex ÿѭӧc cài ÿһt bҵng cây RTree cӫa Guttman. 2.7 6ѫ lѭӧc vӅ RTree: 2.7.1 Giӟi thiӋu: HiӋn nay, trong các lƭnh vӵc ӭng dөng máy tính nhѭ CAD (Computer Aided Design) hay Geo-data Application, viӋc xӱ lý dӳ liӋu không gian (spatial data – gҳn liӅn vӟi tӑa ÿӝ, vӏ trí cӫa mӝt ÿӕi tѭӧng) rҩt cҫn ÿӃn mӝt Fҩu trúc dӳ liӋu hiӋu quҧ trong viӋc thao tác trên dӳ liӋu liên quan ÿӃn tӑa ÿӝ, Yӏ trí cӫa các ÿӕi tѭӧng. Tuy nhiên, các cҩu trúc dӳ liӋu cәÿLӇn không thích Kӧp cho công viӋc này. Vì vұy, chúng ta sӁ tìm hiӇu mӝt loҥi cҩu trúc dӳ liӋu Pӟi: RTree, có khҧ năng ÿáp ӭng các yêu cҫu trên. 2.7.2 6ѫ lѭӧc vӅ dӳ liӋu không gian (spatial data) và các giҧi pháp: Các ÿӕi tѭӧng cӫa dӳ liӋu không gian (quұn, huyӋn, khu vӵc, ÿӗi núi, sông ngòi…) thѭӡng bao phӫ mӝt vùng trong không gian n chiӅu nào ÿó (n=2,3…) chӭ thѭӡng không thӇ hiӋn bҵng mӝt ÿLӇm ÿѫn thuҫn. ĈӇ dӉ hình - 45 - dung, các ví dөÿѭӧc nêu sӁ tұp trung vào không gian mһt phҷng 2 chiӅu, các không gian nhiӅu chiӅu khác sӁ áp dөng tѭѫng tӵ. Ví dө: 1 quұn sӁ bao phӫ mӝt vùng không gian xác ÿӏnh trong không gian 2 chiӅu. 0ӝt trong nhӳng thao tác thѭӡng xuyên nhҩt trong nhӳng ӭng dөng có liên quan ÿӃn dӳ liӋu không gian nhѭ CAD, CAM, GIS là tìm xem có tҩt cҧ bao nhiêu ÿӕi tѭӧng nҵm trong mӝt vùng nào ÿó. Vì vұy khҧ năng xác ÿӏnh ÿӕi tѭӧng dөa vào tӑa ÿӝ, vӏ trí cӫa ÿӕi tѭӧng mӝt cách nhanh và chính xác là Yҩn ÿӅ rҩt quan trӑng. Rõ ràng, các cҩu trúc cә ÿLӇn không thích hӧp vӟi viӋc tìm kiӃm trong không gian nhiӅu chiӅu. Cө thӇ: Các cҩu trúc dӵa trên giá trӏ chính xác nhѭ HashTable không thích hӧp vì yêu cҫu thѭӡng là tìm trong khoҧng còn các Fҩu trúc hӛ trӧ tìm trong khoҧng nhѭ BTree hay ISAM index thì không thích Kӧp cho không gian nhiӅu chiӅu. Thӵc tӃÿã có nhiӅu công trình nghiên cӭu nhҵm tìm ra giҧi pháp cho vҩn ÿӅ này, trong ÿó RTree là mӝt giҧi pháp tӕt. Các giҧi pháp khác nhѭ Cell, QuadTree, k-d Tree, K-D-B Tree, Corner stiching, Grid file, … ÿӅu có nhѭӧc ÿLӇm riêng. 2.8 So sánh vӟi các hӋ quҧn trӏ cѫ sӣ dӳ liӋu hѭӟng ÿӕi Wѭӧng khác: Trên thӏ trѭӡng hiӋn có không nhiӅu hӋ quҧn trӏ cѫ sӣ dӳ liӋu nhúng cho Java và C# nhѭng bҥn băn khoăn không biӃt chӑn hӋ quҧn trӏ nào cho phù Kӧp.Bӣi không có cái gì là hoàn hҧo. Ӣÿây xin ÿѭa ra 6 hӋ quҧn trӏ khác nhau ÿó là ObjectStore PSE Pro cӫa Progress Software, FastObject cӫa - 46 - Versant, Berkelay DB JE cӫa Sleepycat, JISP cӫa CoyoteGulch, db4o cӫa db4oObjects, và PERST.cӫa Knizhnik. Sau ÿây là bҧng so sánh các ÿһc tính Fѫ bҧn cӫa 6 hӋ quҧn trӏ: OODBMS Ngôn ngӳ Kӛ trӧ &ҩp phát vùng nhӟ +ӛ trӧ giao tác Scheme Evaluation Ngôn ngӳ truy Yҩn TiӅn [ӱ lý ObjectStore PSE Pro C++ Java Khai báo Wѭӡng minh hay ngҫm ÿӏnh (nhѭ Gabage Collection) Log file Dùng cѫ chӃ Serialization. Truy vҩn theo thuӝc tính ÿӇ tìm kiӃm ÿӕi Wѭӧng trong tұp Kӧp %ҳt buӝc Db4o Java C# (Standard, Compact và nhӳng Framwork ÿѫn) Khai báo Wѭӡng minh Không Kӛ trӧ phөc Kӗi khi KӋ thӕng có sӵ Fӕ. Có thӇ thêm, xoá, sӱa các trѭӡng và cұp nhұt qua lҥi giӳa các phiên Eҧn. CNJng có thӇ thay ÿәi tên và trѭӡng Fӫa các lӟp. Không có ngôn ngӳ truy Yҩn nhѭng cung cҩp API cho viӋc tҥo ÿӕi Wѭӧng truy vҩn. Không bҳt buӝc Berkeley Java Khai báo Tùy Không Không Không bҳt - 47 - DB JE Wѭӡng minh chӑn buӝc JISP Java Khai báo Wѭӡng minh Không Không Không Không bҳt buӝc FastObject Java C# J# VB Khai báo Wѭӡng minh Có Có JDOQL Bҳt buӝc PERST Java (bao Jӗm cҧ JDK 1.5), C# (Standard, Compact và Framwork ÿѫn) Khai báo Wѭӡng minh hay ngҫm (nhѭ Background Gabage Collection) ÿӕi Wѭӧng ÿúp hay ÿӕi Wѭӧng bóng Lazy scheme evaluation Không Kӛ trӧ ngôn ngӳ truy Yҩn Không bҳt buӝc, Và có thӇ tích hӧp Yӟi ASpectJ và JAssist ÿӇ cung cҩp tính trong suӕt trong Oұp trình (tranparent persistent) %ҧng 2.8-1 So sánh các ÿһc tính cӫa các hӋ quҧn trӏ ĈӇ so sánh tӕc ÿӝ cӫa các hӋ quҧn trӏ cѫ sӣ dӳ liӋu, ta cài ÿһt mӝt ví dө thӵc hiӋn các chӭc năng ÿѫn giҧn nhѭ lѭu trӳ dӳ liӋu (Storing), lҩy dӳ liӋu (Fetching), ÿӏnh vӏÿӕi tѭӧng (Locating) bҵng phѭѫng pháp chӍ mөc trên hai ngôn ngӳ là C# và Java vӟi các hӋ quҧn trӏ cѫ sӣ dӳ liӋu tѭѫng ӭng.. Ví dө này ÿѭӧc thӵc hiӋn theo ba bѭӟc cѫ bҧn nhѭ sau: + Ĉҫu tiên là tҥo ngүu nhiên ÿӕi tѭӧng có khoá kiӇu long và khoá kiӇu string, trong ÿó chӍ mөc là kiӇu string. Sau ÿó lѭu vào cѫ sӣ dӳ liӋu. - 48 - + Sau ÿó tìm kiӃm các ÿӕi tѭӧng dùng khoá long và string. + Cuӕi cùng là tìm và xóa tӯng ÿӕi tѭӧng và cұp nhұt (ÿánh dҩu) vào cѫ sӣ dӳ liӋu. Ĉѫn vӏ thӡi gian mӛi bѭӟc thӵc thi ÿѭӧc tính bҵng giây. Sӕ lѭӧng các ÿӕi Wѭӧng trong mӛi trѭӡng hӧp là giӕng nhau và bҵng 100000. Tҩt cҧ ÿѭӧc kiӇm tra thӱ nghiӋm trên cùng mӝt máy và cҩu hình máy là AMD Athlon 64 (3200+), 1.5Gb RAM, windowsXP. Ngôn ngӳ dùng lұp trình ӣÿây là Csharp và Java ( Sun Java JDK 1.4.2_04). Sau ÿây là bҧng kӃt quҧ, bҧng sҳp tăng dҫn theo thӡi gian thӵc hiӋn: +Ӌ quҧn trӏ Ngôn ngӳ %ѭӟc Tҥo dӳ liӋu %ѭӟc tìm kiӃm %ѭӟc xóa dӳ liӋu PERST Java 3 775 1 683 3 275 PERST CSharp 4 446 2 403 3975 ObjectStore PSE Pro Java 8 272 9 413 3 104 FastObjects J2 Java 13 399 10 856 38 435 FastObjects.Net CSharp 43 012 2 714 7 461 Db4o – 4.0 Java 18 457 6 279 38 886 DB4o – 4.0 CSharp 31 725 41 099 88 517 Berkeley DB JE Java(*) 15 513 10 755 12 758 JISP Java 350 674 343 063 527 248 - 49 - %ҧng 2.8-2 Bҧng so sánh kӃt quҧ cӫa các hӋ quҧn trӏ cѫ sӣ dӳ liӋu hѭӟng ÿӕi tѭӧng (*) – JE dùng Xmxl128M ÿӇ tránh tràn bӝ nhӟ, và ÿLӅu này làm cho thӡi gian chӍ sai sӕ xҩp xӍ 64 giây nên chúng ta không cҫn phҧi quan tâm. 'ӵa vào bҧng so sánh kӃt quҧ trên thì chúng ta nhұn ra rҵng PERST nhanh nhҩt, giӡ thì không phҧi băn khoăn chӑn lӵa giӳa các hӋ quҧn trӏ nӳa. Chúng ta hãy chӑn PERST ÿӇ cho ra mӝt ӭng dөng tӕi ѭu vӅ tӕc ÿӝ. - 50 - CHѬѪNG 3 : Giӟi thiӋu vӅ mô hình Topology 3.1 Giӟi thiӋu: 'ӳ liӋu Topology ÿѭӧc xây dӵng tӯ các ÿӕi tѭӧng hình hӑc cѫ bҧn và chúng có quan hӋ vӟi nhau. Mӭc ÿӝ quan hӋ tuǤ thuӝc vào cҩp Topology. 0ӝt vҩn ÿӅ khó khăn khi xây dӵng các ӭng dөng dӵa trên dӳ liӋu Topology là nguӗn dӳ liӋu Topology không có sҹn. Muӕn có dӳ liӋu Topology chúng ta phҧi chuyӇn tӯ dӳ liӋu hình hӑc cѫ bҧn thành dӳ liӋu Topology. Và các phѭѫng pháp hay công cө chuyӇn ÿәi còn ít ÿѭӧc hӛ trӧ. Trong nӝi dung ÿӅ tài, chúng ta sӁ xây dӵng công cөÿӇ chuyӇn ÿәi dӳ liӋu tӯ dҥng Text thành Gӳ liӋu Topology nhѭ mong muӕn. 3.2 Các khái niӋm cѫ bҧn trong Topology: Start Node: Nút bҳt ÿҫu cӫa cҥnh. End Node: Nút kӃt thúc cӫa cҥnh. Right Edge: Cҥnh ÿҫu tiên gһp khi di chuyӇn ngѭӧc chiӅu kim ÿӗng hӗ quanh nút kӃt thúc cӫa cҥnh hiӋn tҥi. Left Edge: Cҥnh ÿҫu tiên gһp khi di chuyӇn ngѭӧc chiӅu kim ÿӗng hӗ quanh nút bҳt ÿҫu cӫa cҥnh hiӋn tҥi. First Edge: Cҥnh ÿѭӧc chӑn ngүu nhiên, ÿѭӧc xem nhѭ là cҥnh ÿҫu tiên cho viӋc tìm kiӃm các cҥnh kӅ cӫa nút. - 51 - Hình 3.2-1 Các ÿӕi tѭӧng trong mô hình Topology 0ӝt sӕ khái niӋm cѫ bҧn trong mô hình Topology. Left Face: Mһt ӣ bên trái cӫa cҥnh khi di chuyӅn tӯ nút bҳt ÿҫu ÿӃn nút kӃt thúc. Right Face: Mһt ӣ bên phҧi cӫa cҥnh khi di chuyӇn tӯ nút bҳt ÿҫu ÿӃn nút NӃt thúc. Minimum Bounding Rectangle (MBR): Khung chӳ nhұt nhӓ nhҩt chӭa toàn bӝÿӕi tѭӧng. Inner Ring: Biên trong cӫa mһt. Mӛi ÿӕi tѭӧng vùng có thӇ không có, có Pӝt hoһc nhiӅu biên trong. Outer Ring: Biên bao ngoài cӫa mһt. Mӛi ÿӕi tѭӧng vùng có duy nhҩt mӝt biên ngoài. Ĉ̿c tr˱ng: mô hình cӫa ÿӕi tѭӧng ÿӏa lí thӃ giӟi thӵc. Các ÿӕi tѭӧng này có thӇ là ÿӕi tѭӧng vô hѭӟng, mӝt chiӅu, hai chiӅu và ba chiӅu. 3.3 Các loҥi ÿӕi tѭӧng trong Topology: Có 4 loҥi ÿӕi tѭӧng hình hӑc cѫ sӣ là: - 52 - + Node (nút): EntityNode (nút thӵc thӇ), Connected node (nút nӕi NӃt) +Edge (cҥnh) +Face (mһt) + Text (văn bҧn): chӍ làm rõ ÿӕi tѭӧng chӭ không thӇÿѭӧc liên kӃt Yӟi nhau bӣi mӕi quan hӋ Topology Nodes: Là các ÿӕi tѭӧng vô hѭӟng dùng ÿӇ lѭu trӳ các vӏ trí có ý nghƭa. + Entity node: là các node không nҵm trên cҥnh, nó chӍÿѭӧc liên NӃt vӅ mһt Topology vӟi mһt chӭa nó (ví dө nhѭ thӫÿô). Nó dùng ÿӇ thӇ hiӋn nhӳng ÿһc trѭng riêng biӋt hoһc các ÿLӇm khҧo sát, hay các ÿӕi tѭӧng thӇ hiӋn ӣ mӝt tӍ lӋ nào ÿó. + Connected node: Là các node nҵm ÿҫu mút cӫa cҥnh, nó có thӇ là ÿLӇm ÿҫu hay diӇm cuӕi cӫa cҥnh. Và ÿѭӧc liên kӃt vӅ mһt Topology vӟi các Fҥnh khác. Mӛi node còn có FirstEdge và có mӝt khung bao nhӓ nhҩt (MBR – Minimum Boundary Rectangle) chӭa nó.Các node kӃt nӕi ÿѭӧc sӱ dөng theo 2 hѭӟng: Ĉӏnh nghƭa các cҥnh vӅ mһt Topology: lúc này các node ÿѭӧc xem nhѭ là ÿLӇm ÿҫu và ÿLӇm cuӕi ThӇ hiӋn các ÿһc trѭng ÿLӇm ÿѭӧc tìm thҩy tҥi ÿҫu và cuӕi cҥnh cӫa các ÿһc trѭng tuyӃn tính: chҷng hҥn nhѭ các cây cҫu, các cӱa cӕng cӫa mӝt con kênh, các ÿLӇm truy cұp tiӋn ích trong lòng ÿҩt, vӟi cách này thì các thuӝc tính sӁÿѭӧc kӃt hӧp vӟi các ÿһc trѭng ÿLӇm ÿѭӧc liên hӋ vӟi các node kӃt Qӕi. Tҩt cҧ các node kӃt nӕi ÿѭӧc chӭa trong bҧng node kӃt nӕi. NӃu nhiӅu Fҥnh giao nhau tҥi mӝt node, chӍ mӝt cҥnh sӁ ÿѭӧc duy trì cho mӛi node - 53 - trong bҧng node kӃt nӕi; các cҥnh khác ÿѭӧc liên kӃt bҵng cách sӱ dөng thuұt toán tìm cҥnh kӅÿӇ suy ra. Edge: là ÿӕi tѭӧng cѫ sӣ dùng thӇ hiӋn các vӏ trí cӫa các ÿһc trѭng tuyӃn tính nhѭ con ÿѭӡng và các biên cӫa mһt. Cҥnh ÿѭӧc cҩu thành tӯ 2 hay nhiӅu Fһp toҥÿӝ 2 chiӅu (x,y) hay 3 chiӅu (x,y,z) phân biӋt. Hѭӟng cӫa cҥnh có thӇ ÿѭӧc xác ÿӏnh bӣi trұt tӵ các cһp toҥÿӝ. Cҥnh ÿѭӧc ÿӏnh nghƭa tӯ các node ÿҫu cuӕi. Bên cҥnh các node ÿҫu cuӕi thì cҥnh còn chӭa các thông tin nhѭ RightEdge, LeftEdge, RightFace, LeftFace ÿӇ dӉ dàng truy tìm thông tin và Oҩy các ÿһc trѭng. Mӛi cҥnh có mӝt khung bao nhӓ nhҩt (MBR – Minimum Boundary Rectangle) chӭa nó. Face: ÿѭӧc ÿӏnh nghƭa tӯ cҥnh dùng thӇ hiӋn ÿһc trѭng vùng nhѭ các quӕc gia, thành phӕ. Tұp các cҥnh có quan hӋ Topology hình thanh nên biên cӫa Pһt. Mһt có thӇ có biên trong hoһc biên ngoài và có thӇ chӭa mһt nhӓ hѫn trong nó. Quan hӋ này gӗm mӝt tham chiӃu ÿӃn ÿLӇm khӣi ÿҫu cӫa mӝt biên khép kín cӫa các cҥnh, rӗi theo chiӅu kim ÿӗng hӗÿӇ khép kín biên. Mһt có thӇ có nhiӅu biên (rings); có thӇ có mӝt biên ngoài và không có hoһc có mӝt hoһc nhiӅu biên trong. Các mһt không ÿѭӧc chӗng lҩp nhau, và các mһt trong Pӝt lӟp sӱ dөng toàn bӝ vùng mһt phҷng. Mӛi bҧng mһt có mӝt khung chӳ nhұt bao mһt kӃt hӧp (FBR) chӭa hình chӳ nhұt nhӓ nhҩt bao mӛi mһt. 3.4 Các cҩp cӫa Topology: Có 4 cҩp ÿӝ Topology: 0, 1, 2, 3. Ӣ cҩp 3, các kӃt nӕi vӅ mһt Topology hiӋn diӋn mӝt cách tѭӡng minh. - 54 - Ӣ cҩp 0, không có thông tin Topology ÿѭӧc thӇ hiӋn mӝt cách tѭӡng minh. Bҧng tәng kӃt sau tәng kӃt các ÿһc tính cӫa 3 cҩp này và cho mӝt ví dө YӅ mӛi cҩp. &ҩp Tên Các ÿӕi tѭӧng Fѫ sӣ Mô tҧ Ví dө 3 Quan hӋ Topology ÿҫy ÿӫ Node kӃt nӕi, node thӵc thӇ, Fҥnh và mһt %Ӆ mһt ÿѭӧc phân chia bӣi Wұp các mһt ÿѭӧc chӑn Nӻ và phҫn chung duy nhҩt. Các Fҥnh chӍ gһp nhau tҥi các node. 2 Ĉӗ thӏ phҷng Node thӵc thӇ, node kӃt nӕi và cҥnh 0ӝt tұp các Fҥnh và các node ӣÿó khi chiӃu vào bӅ Pһt phҷng, các Fҥnh chӍ gһp nhau tҥi các node 1 Ĉӗ thӏ không Node thӵc thӇ, node kӃt nӕi 7ұp các node thӵc thӇ và các - 55 - phҷng và cҥnh cҥnh có thӇ Jһp nhau tҥi các node 0 ThӇ hiӋn hình bao Node thӵc thӇ và cҥnh 7ұp các node thӵc thӇ và các Fҥnh. Các cҥnh chӍ chӭa các Wӑa ÿӝ, không phҧi là node Eҳt ÿҫu và node kӃt thúc. %ҧng 3.4-1 Các cҩp Topology trong các lӟp VPF Các cӝt trong các bҧng cҥnh và bҧng node xác ÿӏnh tính kӃt nӕi và tính kӅ cho quan hӋ Topology, tùy thuӝc vào cҩp ÿӝ Topology. %ҧng sau chӍ ra các cӝt bҳt buӝc trong mӛi bҧng cѫ sӣ cho cҩp Topology ÿѭӧc yêu cҫu. Các ÿһc tính cӫa các cӝt này ÿѭӧc chӍ ÿӏnh trong các ÿӏnh nghƭa. &ҩp Topolog y %ҧng cѫ sӣ Các cӝt bҳt buӝc 3 Mһt RING_PTR 3 Bҧng vòng (Ring table) FACE_ID, START_EDGE, START_NODE, END_NODE, - 56 - RIGHT_FACE, LEFT_FACE, RIGHT_EDGE, LEFT_EDGE 3 Node thӵc thӇ CONTAINING_FACE 3-1 Node kӃt nӕi FIRST_EDGE 2-1 &ҥnh START_NODE, END_NODE RIGHT_EDGE, LEFT_EDGE 2-0 Node thӵc thӇ (Không có) 0 Cҥnh (Không có) %ҧng 3.4-2 Các cӝt ÿѭӧc yêu cҫu ÿӇÿӏnh nghƭa quan hӋ Topology trong VPF Ba hình sau sӱ dөng biӇu ÿӗ mӕi quan hӋ thӵc thӇ (ER) ÿӇ miêu tҧ các ÿӕi Wѭӧng cѫ sӣ và các mӕi quan hӋ cӫa chúng ӣ mӛi cҩp Topology. Hình 3.4-1 Quan hӋ Topology cҩp 0 - 57 - Hình 3.4-2 Quan hӋ Topology cҩp 1 và 2 - 58 - Hình 3.4-3 Quan hӋ Topology cҩp 3 - 59 - 3.5 MBR – Minimum Bounding Rectangle: 0ӝt khung bao nhӓ nhҩt ÿѭӧc yêu cҫu trong bҧng cҥnh hoһc bҧng mһt. Vì vòng bên ngoài cӫa mһt tәng thӇ không có thӇ hiӋn hình hӑc nào nên bҧng ghi FBR cho mһt 1 luôn có giá trӏ null cho các XMIN, YMIN, XMAX, YMAX. Tên cӝt Mô tҧ Loҥi Fӝt Loҥi khóa Op/Man ID XMIN YMIN XMAX YMAX Id 7ӑa ÿӝ X nhӓ nhҩt 7ӑa ÿӝ Y nhӓ nhҩt Toҥÿӝ X lӟn nhҩt 7ӑa ÿӝ Y lӟn nhҩt I F/R F/R F/R F/R P N N N N M M M M M %ҧng 3.5-1. Ĉӏnh nghƭa khung chӳ nhұt nhӓ nhҩt MBR - 60 - CHѬѪNG 4 : Giӟi thiӋu vӅ GIS 4.1 Giӟi thiӋu vӅ các ӭng dөng và giҧi pháp vӅ GIS: GIS (Geography Information System ) là công nghӋ ra ÿӡi vào nhӳng Qăm 60 cӫa thӃ kӍ 20. Công nghӋ GIS cho phép ÿáp ӭng các nhu cҫu liên quan tӟi quҧn lý cNJng nhѭ khai thác và sӱ dөng các thông tin, dӳ liӋu ÿӏa lý. Tӯ giai ÿRҥn ÿҫu ÿѭӧc sӱ dөng trên các hӋ thӕng máy tính lӟn ӣ Mӻ và Canada, ÿӃn nay, công nghӋ GIS ÿã ÿѭӧc áp dөng và triӇn khai hӃt sӭc rӝng rãi trên phҥm vi toàn thӃ giӟi, trên nhӳng hӋ thӕng máy PC và thӡi gian gҫn ÿây là trên cҧ các thiӃt bӏ PDA. 0ӝt sӕ ӭng dөng GIS nәi tiӃng trên thӃ giӟi hiӋn nay ÿang ÿѭӧc ӭng Gөng rӝng rãi nhѭ MapInfo, Arc/Info, Spatial Database Engine (SDE), ArcView GIS...: ÿѭӧc sӱ dөng vӟi mөc ÿích quҧn lý, tích hӧp, quy hoҥch và khai thác các dӳ liӋu bҧn ÿӗ. 7ҥi ViӋt Nam, công nghӋ GIS cNJng ÿã ÿѭӧc nghiên cӭu và có ÿѭӧc mӝt Vӕ sҧn phҭm có kӃt quҧÿáng khích lӋ. Thӡi gian gҫn ÿây, viӋc nghiên cӭu công nghӋ GIS ÿã cho ra hàng loҥt ӭng dөng áp dөng trong thӵc tӃ tҥi Tp.Hӗ Chí Minh, nhѭ StreetFinder cӫa DolSoft, hӋ thӕng GIS trên website Ngân hàng bҧn ÿӗ trӵc tuyӃn cӫa VDC, DMC, Dolsoft (www.basao.com.vn), hӋ thӕng chӍ dүn giao thông cӫa nhóm AMI Group - Ĉҥi hӑc Khoa hӑc Tӵ nhiên Tp.Hӗ Chí Minh. Các giҧi pháp vӅ GIS thѭӡng ÿѭӧc chia làm hai nhóm chính: • Giҧi quyӃt các bài toán phӭc tҥp liên quan ÿӃn mҥng giao thông nhѭ: Các bài toán nhѭ tìm kiӃm ÿѭӡng ÿi tӕi ѭu, ÿLӅu phӕi lӝ trình giao - 61 - thông… thѭӡng ÿѭӧc áp dөng trên các hӋ thӕng máy tính lӟn, có cҩu hình Pҥnh. • HiӇn thӏ và tìm kiӃm các thông tin bҧn ÿӗ. Ĉây là dҥng ӭng dөng bҧn ÿӗÿLӋn tӱ, cung cҩp các khҧ năng cho phép ngѭӡi sӱ dөng xem bҧn ÿӗ và tìm kiӃm mӝt sӕ thông tin cҫn thiӃt, thѭӡng ÿѭӧc áp dөng trên các máy tính thông thѭӡng và nhӓ. 4.2 Mô hình dӳ liӋu cӫa thông tin ÿӏa lý: Câu hӓi ÿһt ra là làm sao ÿӇ chuyӇn ÿәi thông tin bҧn ÿӗ vào máy tính và ngѭӧc lҥi? ĈӇ làm ÿѭӧc ÿLӅu ÿó thì GIS phҧi lѭu trӳ thông tin vӅ Geometry (hình dҥng và vӏ trí ÿӕi tѭӧng ) và Attribute (các thuӝc tính cӫa ÿӕi tѭӧng) Hình 4.2-1 Thông tin cҫn lѭu trӳ +Ӌ thӕng thông tin ÿӏa lý là mӝt hӋ thӕng thu thұp, lѭu trӳ và xӱ lý các thông tin dѭӟi dҥng giҩy, ҧnh, sӕ vӅ các hiӋn tѭӧng tӵ nhiên trong thӃ giӟi thӵc. Trong cѫ sӣ dӳ liӋu ÿѭӧc cҩu thành tӯ thông tin, các thông tin thѭӡng không sӱ dөng ÿѭӧc trӵc tiӃp mà phҧi thông qua mӝt hӋ thӕng các công cө truy xuҩt, tái tҥo lҥi ÿӕi tѭӧng thӃ giӟi thӵc mà ngѭӡi dùng quan tâm. Mӝt ÿӕi tѭӧng ÿѭӧc lѭu trӳ trong cѫ sӣ dӳ liӋu dѭӟi dҥng các thӵc thӇ hình hӑc, ngѭӡi dùng sӁ dùng phҧi tái tҥo lҥi ÿӕi tѭӧng ҩy thông qua các dӳ liӋu hình - 62 - Kӑc này. Nhѭ vұy dӳ liӋu là rҩt ÿa dҥng, chúng có mang tính không gian, thӡi gian, ÿѭӧc gӑi là dӳ liӋu ÿӏa lý. Tóm lҥi dӳ liӋu ÿӏa lý là các dӳ liӋu sӕ mô tҧ các ÿӕi tѭӧng trong thӃ giӟi thӵc. 'ӳ liӋu ÿLҥ lý ÿѭӧc tә chӭc thành hai nhóm thông tin chính, ÿó là: 1/ Nhóm thông tin vӅ phân bӕ không gian. 2/ Nhóm thông tin vӅ thuӝc tính cӫa ÿӕi tѭӧng. Không giӕng nhѭ các dҥng dӳ liӋu thông dөng khác, dӳ liӋu ÿLҥ lý phӭc Wҥp hѫn, nó bao gӗm các thông tin vӅÿLҥ lý, các quan hӋ Topology và các thuӝc tính phi không gian. Mӑi dӳ liӋu ÿLҥ lý có thӇÿѭӧc mô hình vӟi ba thành phҫn khác nhau theo quan niӋm topology – ÿLӇm, ÿѭӡng, vùng.Bҩt kì Pӝt ÿӕi tѭӧng tӵ nhiên nào ÿӅu có thӇÿѭӧc biӇu diӉn bҵng mӝt trong bao ÿӕi tѭӧng này kèm theo chúng là nhӳng thông tin ÿһc thù riêng. Mô hình dӳ liӋu ÿLҥ lý bao gӗm bӕn thành phҫn sau: + Thành phҫn khoá: là mã sӕ duy nhҩt cho thӵc thӇÿӇ phân biӋt thӵc thӇ này vӟi thӵc thӇ khác. + Ĉӏnh vӏ: ChӍ ra vӏ trí cӫa thӵc thӇ. + Thành phҫn phi không gian: Là nhӳng thuӝc tính riêng cho tӯng thӵc thӇ nhѭ tӹ lӋ, khoҧng, ÿӏnh danh …. + Thành phҫn không gian: Các ÿӕi tѭӧng tѭ nhiên bên ngoài ÿѭӧc chuyӇn vào máy tính ÿӇ quҧn lý theo hai cách sau: Raster và Vector Mô hình vectѫ: tѭӡng ÿѭӧc biӇu diӉn duӟi dҥng ÿLӇm, ÿѭӡng và vùng. Vӏ trí không gian cӫa mӝt thӵc thӇÿѭӧc xác ÿӏnh bӣi mӝt hӋ toҥÿӝ thӕng nhҩt toàn cҫu. Mӝt thӵc thӇÿѭӧc xác ÿӏnh bӣi cһp toҥÿӝ (X,Y) và các thuӝc tính khác nhѭ: kiӇu ÿLӇm, màu, hình dҥng. - 63 - Hình 4.2-2 Dӳ liӋu Vector Hình 4.2-3 Các thӵc thӇÿѭӧc thӇ hiӋn trên bҧn ÿӗ Mô hình Raster: Dӳ liӋu Raster ÿѭӧc phân biӋt bҵng ÿѫn vӏ pixel, ÿó là hình ҧnh ÿѫn vӏ nhӓ nhҩt phҧn ánh ÿӕi tѭӧng trong không gian. &ҩu trúc dӳ liӋu ratser 2-D ÿѭӧc xem nhѭ là mӝt ma trұn các ô lѭӟi ÿһc trѭng cho mӝt ô vuông bӅ mһt ÿҩt. Ĉӝ phân giҧi cӫa dӳ liӋu raster phө thuӝc vào kích thѭӟc cӫa nhӳng ô lѭӟi này. Hình 4.2-4 Dӳ liӋu raster - 64 - 6͹ khác bi͏t giͷa hai ki͋u dͷ li͏u: Cҧ hai kiӇu dӳ liӋu này ÿӅu rҩt hӳu ích nhѭ nhau, nhѭng chúng cNJng có sӵ khác biӋt quan trӑng. Sau ÿây là bҧng so sánh giӳa hai kiӇu dӳ liӋu này. Vector Raster 'ӳ liӋu hiӇn thӏ ít hѫn, nhanh hѫn, chӍ chӫ yӃu hiӇn thӏ các ÿӕi tѭӧng mà không hiӇn thӏÿһc tính cӫa ÿӕi tѭӧng 'ӳ liӋu nhiӅu hѫn, hiӇn thӏ chұm hѫn, không nhӳng hiӇn thӏÿӕi tѭӧng mà còn hiӇn thӏ cҧÿһc tính cӫa ÿӕi tѭӧng %ҧng 4.2-1 Bҧng so sánh kiӇu dӳ liӋu Raster va Vector Hình 4.2-5 So sánh Raster và Vector 4.3 Thu thұp dӳ liӋu: Có nhiӅu kӻ thuұt ÿӇ thu thұp thông tin tӯ các nguӗn dӳ liӋu. Nó thѭӡng ÿѭӧc thu thұp tӯ viӋc ÿo ÿҥc trӵc tiӃp trên thӃ g iӟ i thӵc . Tuy nhiên, mӝt Vӕ lӟn dӳ liӋu liӋu có thӇ ÿѭӧc chuyӇn ÿәi tӯ bҧn ÿӗ giҩy sang hình thӭc Oѭu trӳ cӫa bҧn ÿӗÿLӋn tӱ. Có ba phѭѫng pháp thѭӡng ÿѭӧc sӱ dөng ÿó là Scanning(phѭѫng pháp quét), Digistsing (phѭѫng pháp sӕ hoá), Vectorisation (phѭѫng pháp vecto hoá). - 65 - Phѭѫng pháp quét: Ĉây là kӻ thuұt thông dөng mà lҥi ít tӕn kém, có thӇ ÿѭӧc thӵc hiӋn trên các máy tính cá nhân hay cӫa công ty. Máy quét sӁ lѭu trӳ lҥi các hình ҧnh cӫa bҧn ÿӗ giҩy dѭӟi hình thӭc sӕ và hiӇn thӏ chúng trӣ Oҥi màn hình. ViӋc quét hình ҧnh tӯ bҧn ÿӗ giҩy tѭѫng ÿӕi ÿѫn giҧn và nhanh chóng, tuy nhiên phѭѫng pháp này lҥi không thӇ cung cҩp thuӝc tính cӫa các ÿӕi tѭӧng tӵ nhiên nhѭÿLҥ chӍ cӫa mӝt toà nhà hay ngày thành lұp cuҧ mӝt sân vұn ÿӝng nào ÿó. Dӳ liӋu có ÿѭӧc tӯ nhӳng phѭѫng pháp này thѭӡng Gѭӟi dҥng raster cho kích thѭӟc rҩt lӟn. Hình 4.3-1 Phѭѫng pháp Scanning Phѭѫng pháp sӕ hoá: Kӻ thuұt này ÿòi hӓi phҧi cung cҩp các thiӃt bӏ chuyên ngành. Bҧn ÿӗ nguӗn sӁÿѭӧc trãi bӅ mһt ngang, mӝt con trӓ sӁ xác ÿӏnh tӑa ÿӝ các ÿLӇm tҥo nên hình dҥng bҧn ÿӗ, sau quá trình sӕ hoá, thuӝc tính cӫa các ÿӕi tѭӧng mӟi ÿѭӧc thêm vào. Phѭѫng pháp này ÿòi hӓi nhiӅu thӡi gian và nguӗn dӳ liӋu có ÿѭӧc tӯ kӻ thuұt này dѭӟi hình thӭc Vectѫ. - 66 - Hình 4.3-2 Phѭѫng pháp sӕ hoá Phѭѫng pháp Vector hoá: Mӝt vài hӋ thӕng máy tính chuyên nghiӋp có thӇ chuyӇn ÿәi dӳ liӋu Raster sang dҥng dӳ liӋu Vectѫ. Phѭѫng pháp này cho tӕc ÿӝ nhanh do tính tӵÿӝng nhѭng lҥi kém chính xác hѫn so vӟi viӋc sӕ hoá thӫ công. Các kӻ thuұt trên ÿӅu dӵa vào nguӗn dӳ liӋu bҧn ÿӗ giҩy có sҹn. Trên thӵc tӃ, ngѭӡi ta còn dӵa vào các ngành lƭnh vӵc khác nhѭ: viӉn thám, GPS, phân tích ҧnh… ÿӇ thu thұp nguӗn dӳ liӋu cho GIS. 4.4 Các giҧi thuұt nghiên cӭu vӅ GIS: Công nghӋ GIS liên quan trӵc tiӃp tӟi lý thuyӃt ÿӗ thӏ cNJng nhѭ trí tuӋ nhân tҥo trong viӋc ÿѭa ra các giҧi thuұt ÿӇ giҧi quyӃt các bài toán liên quan. Ĉây là nhӳng lƭnh vӵc nghiên cӭu ÿѭӧc ÿҫu tѭ rҩt nhiӅu vӟi các cҧi tiӃn cNJng nhѭÿã ÿѭa ra ÿѭӧc nhiӅu giҧi thuұt tӕt hoһc tӕi ѭu (chҷng hҥn nhѭ các giҧi thuұt clipping, kiӇm tra ÿLӇm trong/ngoài ÿa giác hay các giҧi thuұt tìm kiӃm trên cҩu trúc dӳ liӋu hoһc tìm kiӃm lӝ trình tӕi ѭu...) Các bài toán vӅ GIS hiӋn nay vүn ÿang ÿѭӧc nghiên cӭu và có nhӳng cҧi tiӃn rҩt tӕt, kӇ cҧ trong các bài toán phӭc tҥp.Công nghӋ GIS vӟi nhӳng lӧi thӃ cӫa nó ÿã mang lҥi phѭѫng pháp quҧn lý hiӋu quҧ hѫn, mӑi sӵ vұt, ÿӕi - 67 - Wѭӧng, tӯ nhӳng thông tin không gian ÿӃn nhӳng thông tin phi không gian tҩt FҧÿӅu ÿѭӧc quҧn lý mӝt cách thӕng nhҩt trên cùng hӋ thӕng. Mӑi truy xuҩt ÿӅu thӇ hiӋn trӵc quan hѫn trên bҧn ÿӗ sӕ thay cho nhӳng dòng văn bҧn ÿѫn thuҫn. Chính vì thӃ GIS ngày mӝt trӣ nên quen thuӝc hѫn cho ngѭӡi dùng, nó ÿѭӧc ӭng dөng trong nhiӅu lƭnh viӋc tӯÿѫn giҧn ÿӃn phӭc tҥp và chi phí ÿòi hӓi ÿҫu tѭ ngày mӝt thҩp hѫn. Có thӅ nói rҵng GIS ngày mӝt tӵ khҧÿӏnh Wҫm quan trӑng, ÿѭӧc các nѭӟc phát triӇn xem nhѭ mӝt mNJi nhӑn trong lƭnh công nghӋ thông tin. 4.5 Các cҩu trúc dӳ liӋu không gian trong GIS: 4.5.1 Cây tӭ phân (Quad Tree): Quad Tree ÿѭӧc sӱ dөng ÿӇ lұp chӍ sӕ không gian 2D. Mӛi nút trong cӫa cây chia không gian thành 4 vùng không gian con tách biӋt (ÿѭӧc gӑi là NW, NE, SW, SE) tѭѫng ӭng vӟi các trөc tӑa ÿӝ. Mӛi vùng không gian con này ÿѭӧc tách mӝt cách ÿӋ quy cho ÿӃn khi có nhiӅu nhҩt mӝt ÿӕi tѭӧng bên trong mӛi vùng. Hình 4.5.1-1 Cây tӭ phân - 68 - Quad Tree không ÿѭӧc cân bҵng và sӵ cân bҵng cӫa nó phө thuӝc vào sӵ phân bӕ cӫa dӳ liӋu và trұt tӵ chèn dӳ liӋu vào cây. 4.5.2 K-d Tree: Phѭѫng pháp này sӱ dөng mӝt cây nhӏ phân ÿӇ chia không gian k chiӅu. Cây này tách không gian thành hai không gian con tѭѫng ӭng vӟi mӝt trong các tӑa ÿӝ cӫa ÿLӇm ÿang tách. Hình 4.5.2-1 K-D Tree *ӑi level(nod) là chiӅu dài cӫa ÿѭӡng ÿi tӯ nút gӕc ÿӃn nút nod và giҧ sӱ các trөc tӑa ÿӝÿѭӧc ÿánh sӕ tӯ 0 ÿӃn k – 1. Tҥi bұc level(nod)ӣ mӛi nút không gian ÿѭӧc tách tѭѫng ӭng vӟi sӕ tӑa ÿӝ (level(nod) mod k). Thao tác thêm và tìm kiӃm tѭѫng tӵ nhѭÿӕi vӟi cây nhӏ phân. Chúng ta chӍ phҧi so sánh các nút tѭѫng ӭng vӟi sӕ tӑa ÿӝ (level(nod) mode k). Cҩu trúc này có mӝt bҩt lӧi là nhҥy cҧm vӟi trұt tӵ mà các ÿӕi tѭӧng ÿѭӧc thêm vào. - 69 - 4.5.3 R-Tree: R-Tree là sӵ biӃn cҧi cӫa B-Tree cho dӳ liӋu không gian. R-Tree là cây cân bҵng và chia không gian thành các khung chӳ nhұt có thӇ chӗng lҩp(phӫ) nhau. Mӛi nút ngoҥi trӯ nút gӕc chӭa tӯ mÿӃn M con ( 2/2 Mm ££ ). Nút gӕc có tӕi thiӇu 2 con ngoҥi trӯ nút lá. Hình 4.5.3-1 R-Tree Nút ÿѭӧc thӇ hiӋn bӣi mӝt khung bao nhӓ nhҩt - MBR(minimum bounding rectangle) chӭa tҩt cҧ các ÿӕi tѭӧng cӫa cây con cӫa nó. Mӛi con Fӫa nút ÿѭӧc tách ÿӋ quy. Các con trӓ trӓÿӃn các ÿӕi tѭӧng dӳ liӋu ÿѭӧc lѭu ӣ các nút lá. Vì các MBR có thӇ chӗng lҩp nên có thӇ cҫn phҧi tìm kiӃm trên nhiӅu nhánh cӫa cây. Do ÿó, các khung chӳ nhұt càng tách biӋt càng tӕt. Vҩn ÿӅ này phҧi ÿѭӧc giҧi quyӃt ӣ thao tác INSERT (chèn) có sӱ dөng mӝt sӕ - 70 - heuristic. Thao tác này tìm mӝt nút lá sao cho khi chèn ÿӕi tѭӧng mӟi vào nó VӁ gây nhӳng thay ÿәi nhӓ nhѭ có thӇ. Thao tác tách cNJng quan trӑng. Mөc tiêu là làm giҧm xác suҩt sӁ phҧi tìm Fҧ hai nút mӟi. ViӋc kiӇm tra tҩt cҧ các khҧ năng có ÿӝ phӭc tҥp sӕ mNJ, vì thӃ nhӳng thuұt toán cho lӡi giҧi xҩp xӍ thѭӡng ÿѭӧc sӱ dөng. R-Tree là mӝt trong nhӳng cҩu trúc dӳ liӋu không gian ÿѭӧc ÿӅ cұp ÿӃn nhiӅu nhҩt và nó rҩt thѭӡng ÿѭӧc sӱ dөng ÿӇ so sánh vӟi nhӳng cҩu trúc mӟi. Trong các ӭng dөng GIS, R-Tree ÿóng vai trò quan trӑng trong viӋc chӑn Oӵa ÿӕi tѭӧng hiӇn thӏ cNJng nhѭ kích hoҥt nhanh các ÿӕi tѭӧng ÿӗ hӑa. 4.5.4 R*-Tree: R*-Tree là mӝt biӃn cҧi cӫa R-Tree sӱ dөng heuristic khác cho thao tác INSERT. R-Tree cӕ gҳng tӕi thiӇu vùng cӫa tҩt cҧ các nút cӫa cây. R*-Tree NӃt hӧp nhiӅu tiêu chuҭn: vùng bӏ phӫ bӣi khung chӳ nhұt bao, biên cӫa khung chӳ nhұt và sӵ chӗng lҩp giӳa các khung chӳ nhұt. 0өc tiêu làm giҧm vùng bӏ phӫ bӣi khung chӳ nhұt bao là làm giҧm không gian chӃt, có nghƭa là không gian bӏ phӫ bӣi khung chӳ nhұt bao chӭ không phҧi bӣi các khung chӳ nhұt bӏ chӭa. ĈLӅu ÿó làm giҧm sӕ nhánh tìm kiӃm vô ích. Tӕi thiӇu hóa biên (tәng chiӅu dài các cҥnh) cӫa khung chӳ nhұt bao tӕt hѫn là dùng nhӳng khung vuông. Tӕi thiӇu hóa sӵ chӗng lҩp giӳa các khung chӳ nhұt làm giҧm sӕÿѭӡng phҧi tìm kiӃm. Cài ÿһt phѭѫng pháp này thì khó hѫn, nhѭng R*-Tree hiӋu quҧ hѫn R- Tree nhiӅu. - 71 - 4.5.5 R+-Tree: R+-Tree là sӵ mӣ rӝng cӫa R-Tree. Khác vӟi R-Tree, các khung bao cӫa các nút tҥi mӝt mӭc không chӗng lҩp trong cҩu trúc này. Ĉһc tính này làm giҧm sӕ lѭӧng nhánh phҧi tìm kiӃm cӫa cây và làm giҧm phí tәn thӡi gian. Hình 4.5.5-1 R+-Tree R+-Tree ÿѭӧc phép tách các ÿӕi tѭӧng dӳ liӋu ÿӇ cho nhӳng phҫn khác nhau cӫa mӝt ÿӕi tѭӧng có thӇÿѭӧc lѭu ӣ nhiӅu nút cӫa mӝt mӭc. NӃu mӝt khung chӳ nhұt chӗng lҩp mӝt khung chӳ nhұt khác, nó sӁ bӏ phân rã thành Pӝt nhóm các khung chӳ nhұt không chӗng lҩp nhau. ĈLӅu này làm gia tăng không gian lѭu trӳ nhѭng cho phép loҥi bӓ sӵ chӗng lҩp giӳa các nút và do ÿó làm giҧm phí tәn thӡi gian tìm kiӃm. - 72 - 4.6 Ӭng dөng bҧn ÿӗ: 4.6.1 Các kiӇu bҧn ÿӗ: Hình 4.6.1-1 Các kiӇu bҧn ÿӗ Toppographic là bҧn ÿӗ chӍ bao gӗm các ÿһc tính vұt lý ví dө nhѭÿѭӡng, sông, nhà. Contour (ÿѭӡng viӅn): là bҧn ÿӗ bao gӗm các ÿѭӡng nӕi các vӏ trí ÿLӇm có cùng giá trӏ ví dө nhѭ: ÿӝ sâu cӫa biӇn, ÿѭӡng ÿҷng áp. Choropleth: là bҧn ÿӗÿӏa chí. 4.6.2 Các ÿӕi tѭӧng cӫa bҧn ÿӗ: Công nghӋ GIS cNJng cho phép lѭu trӳ thông tin bҧn ÿӗ trong máy tính theo cách máy tính hoá, nghƭa là lѭu trӳ dѭӟi dҥng tұp tin vӟi các cҩu trúc khác nhau. Và tӯÿó bҧn ÿӗ có thӇÿѭӧc lѭu trӳ, thêm, xoá, sӱa mӝt cách dӉ dàng. Nhìn vào vào mӝt bҧn ÿӗ ta cNJng nhұn thҩy ÿѭӧc các ÿӕi tѭӧng chính Fӫa bҧn ÿӗ, nó bao gӗm: Line(ÿѭӡng), Area (vùng), Point (ÿLӇm), và Text (văn bҧn). - 73 - Hình 4.6.2-1 Các ÿӕi tѭӧng chính trong bҧn ÿӗ 4.7 Ӭng dөng GIS trên PocketPC: 6ӵ phát triӇn mҥnh mӁ cӫa Internet, cNJng nhѭ khҧ năng cӫa công nghӋ phҫn cӭng, ÿã dүn ÿӃn sӵ ra ÿӡi cӫa các thiӃt bӏӭng dөng Internet. Theo các nhà nghiên cӭu thӏ trѭӡng, mһc dù PC vүn giӳ vai trò chӫ yӃu trong viӋc xӱ lý và hӛ trӧ công viӋc, nhѭng các thiӃt bӏ Internet hay thiӃt bӏ hӛ trӧ cá nhân VӁ ngày càng khҷng ÿӏnh ÿѭӧc vai trò cӫa nó trên thӏ trѭӡng. Ra ÿӡi vào nhӳng năm 90 cӫa thӃ kӍ 20, Pocket PC là mӝt dҥng thiӃt bӏ Fҫm tay PDA (Personal Digital Assistant) sӱ dөng hӋÿLӅu hành Pocket PC, Pӝt biӃn thӇ cӫa Windows CE, mӝt hӋ ÿLӅu hành nhúng ÿѭӧc Microsoft phát triӇn cho các thiӃt bӏ không là PC (non-PC). Do ÿһc trѭng nhӓ gӑn, ÿѭӧc thiӃt kӃ vӟi mөc ÿích giúp ngѭӡi sӱ dөng Oѭu trӳ các thông tin cá nhân, công viӋc cҫn thiӃt cNJng nhѭ các phҫn mӅm tӕi thiӇu trên mӝt thiӃt bӏ nhӓ gӑn, và sӱ dөng mӝt hӋ ÿLӅu hành hӑ hàng Windows, Pocket PC ÿã ÿѭӧc khá nhiӅu nhà sҧn xuҩt phҫn mӅm quan tâm trong lƭnh vӵc phát triӇn ӭng dөng, trong ÿó có các ӭng dөng GIS. Tuy nhiên, Pocket PC chҥy trên nӅn hӋ ÿLӅu hành nhúng Windows CE, KӋÿLӅu hành chӍ cung cҩp bӝ nhӟ mӝt cách giӟi hҥn cho các ӭng dөng phát - 74 - triӇn trên nó. Vì vұy, các ӭng dөng liên quan tӟi hӋ thӕng GIS phát triӇn trên Pocket PC và hӋÿLӅu hành Windows CE gһp phҧi các vҩn ÿӅ vӅ tӕi ѭu hoá Eӝ nhӟ cNJng nhѭ tӕc ÿӝ và thѭӡng có tӕc ÿӝ chұm hѫn nhiӅu so vӟi các ӭng dөng trên PC thông thѭӡng. Ngoài ra, do khҧ năng lѭu trӳ có giӟi hҥn, viӋc ӭng dөng GIS trên môi trѭӡng này cNJng gһp không ít khó khăn. Trên thӏ trѭӡng, mӝt sӕ sҧn phҭm GIS trên Pocket PC ÿã ÿѭӧc phә biӃn Uӝng rãi nhѭ Pocket Street cӫa Microsoft, MapInPocket cӫa Information Technologies India Ltd... - 75 - CHѬѪNG 5 : Giӟi thiӋu vӅ chuҭn OpenGIS 5.1 Các kiӇu dӳ liӋu hình hӑc cӫa OpenGIS: Các cҩu trúc chӍ mөc không gian, ví dө R-Tree, ÿѭӧc sӱ dөng trong các hӋ quҧn trӏ cѫ sӣ dӳ liӋu không gian (SDBMS) ÿӇ tăng tӕc quá trình xӱ lý các truy vҩn chҷng hҥn nhѭ các truy vҩn vùng hoһc các truy vҩn các ÿӕi tѭӧng lân cұn gҫn nhҩt. Do ÿó, phҫn cài ÿһt các thao tác tìm kiӃm lân cұn thѭӡng sӱ Gөng R-Tree. Tuy nhiên, nӃu các ÿӕi tѭӧng không gian khá phӭc tҥp, viӋc Oҩy các lân cұn cӫa vài ÿӕi tѭӧng theo cách này vүn tiêu tӕn rҩt nhiӅu thӡi gian vì sӵ phӭc tҥp cӫa ÿánh giá các quan hӋ lân cұn trên các ÿӕi tѭӧng ÿó. Thêm vào ÿó, khi tҥo ra tҩt cҧ các ÿѭӡng lân cұn vӟi mӝt ÿӕi tѭӧng nguӗn ÿѭӧc cho, mӝt sӕ lѭӧng rҩt lӟn các thao tác tìm kiӃm lân cұn phҧi ÿѭӧc thӵc hiӋn. NhiӅu hӋ thӕng quҧn trӏ cѫ sӣ dӳ liӋu không gian là khá tƭnh vì không có nhiӅu cұp nhұt trên các ÿӕi tѭӧng chҷng hҥn nhѭ các bҧn ÿӗÿӏa lý. Cho nên các kiӇu dӳ liӋu hình hӑc cùng vӟi nhiӅu thao tác trên các ÿӕi tѭӧng ÿѭӧc các hӋ quҧn trӏ cѫ sӣ dӳ liӋu sau này hӛ trӧ. - 76 - Hình 5.1-1 HӋ phân cҩp các kiӇu dӳ liӋu hình hӑc cӫa OpenGIS. 5.2 OpenGIS Specification (ÿһc tҧ OpenGIS): 5.2.1 Các khái niӋm: Ĉһc tҧ OpenGIS (OpenGIS Specification), mӝt ÿһc tҧ toàn diӋn cӫa mӝt Eӝ khung phҫn mӅm cho các truy cұp phân tán ÿӃn geodata và nhӳng tài nguyên geoprocessing. Ĉһc tҧ này cung cҩp cho các nhà phát triӇn phҫn mӅm trên thӃ giӟi mӝt khuôn mүu giao diӋn chung cһn kӁÿӇ viӃt các phҫn mӅm hoҥt ÿӝng chung vӟi các phҫm mӅm dҥng OpenGIS khác.Bӝ khung OpenGIS (OpenGIS framework) gӗm: - Mӝt cách thӭc chung dҥng sӕ thӇ hiӋn Trái ÿҩt và các hiӋn tѭӧng cӫa nó trên cѫ sӣ toán hӑc và khái niӋm. - Mӝt mô hình chung ÿӇ thӵc hiӋn nhӳng truy nhұp, quҧn lý, thao tác, trình bày, và chia sҿ geodata giӳa nhӳng cӝng ÿӗng thông tin. - 77 - - Mӝt bӝ khung ÿӇ sӱ dөng mô hình Open Geodata và mô hình dich vө Open GIS ÿӇ giҧi quyӃt vҩn ÿӅ khҧ năng không hoҥt ÿông kӃt hӧp không chӍ YӅ mһt kƭ thuұt mà cҧ vӅ mһt tә chӭc. Các nhà phát triӇn xây dӵng nhӳng hӋ thӕng có giao diӋn thích ӭng OpenGIS Specification sӁ tҥo ra nhӳng phҫn mӅm trung (middleware), phҫn PӅm bӝ phұn (componentware) và nhӳng ӭng dөng có thӇ kiӇm soát mӝt phҥm vi rӝng các kiӇu geodata và các hàm geoprocessing. Ngѭӡi sӱ dөng các hӋ thӕng này có thӇ chia sҿ mӝt không gian dӳ liӋu tiӅm năng rӝng lӟn qua mҥng, dù dӳ liӋu ÿѭӧc sҧn sinh vào các thӡi ÿLӇm khác nhau bӣi các nhóm không liên quan sӱ dөng các hӋ thӕng sҧn xuҩt khác nhau cho nhӳng Pөc ÿích khác nhau và thұt sӵ có thӇÿang hiӋn hӳu dѭӟi sӵÿLӅu khiӇn chính Fӫa hӋ thӕng ÿѭӧc sӱ dөng cho viӋc sҧn xuҩt cӫa hӑ. Geodata kӃ thӯa (Legacy geodata) ÿѭӧc tә chӭc trong các hӋ thӕng có giao diӋn thích ӭng OpenGIS Specification sӁ có thӇÿѭӧc truy xuҩt bӣi các phҫn mӅm có giao diӋn thích ӭng OpenGIS Specification khác. OpenGIS Specification cung Fҩp mӝt bӝ khung cho nhӳng ngѭӡi phát triӇn phҫn mӅm ÿӇ tҥo ra phҫn mӅm cho phép nhӳng ngѭӡi dùng cӫa hӑ truy nhұp và xӱ lý dӳ liӋu ÿӏa lý tӯ nhӳng nguӗn ÿa dҥng qua mӝt giao diӋn tính toán chung bên trong mӝt nӅn Wҧng công nghӋ thông tin mӣ. Ѭu ÿLӇm: Ĉӕi vӟi ngѭӡi phát triӇn ӭng dөng có thӇ dӉ dàng và linh hoҥt hѫn ÿӇ: ViӃt phҫn mӅm ÿӇ truy cұp geodata.ViӃt phҫn mӅm ÿӇ truy cұp nhӳng tài nguyên geoprocessing.Sӱa ÿәi nhӳng ӭng dөng theo nhu cҫu ngѭӡi dùng cө thӇ, tích Kӧp phi không gian và không gian. Và có thӇ chӑn mӝt môi trѭӡng phát triӇn - 78 - hay cung cҩp nhӳng ӭng dөng trên nhӳng nӅn tҧng ÿa dҥng và cNJng có thӇ sӱ Gөng lҥi mã geoprocessing Ĉӕi vӟi nhà quҧn lý thông tin linh hoҥt hѫn trong viӋc Truy cұp và / hoһc phân phӕi geodata, cung cҩp nhӳng khҧ năng geoprocessing tӟi nhӳng khách hàng, tích hӧp Dӳ liӋu ÿӏa lý và sӵ xӱ lý vào mӝt kiӃn trúc tính toán liên hӧp và có thӇ chӑn nhӳng nӅn thích hӧp - kiӇu máy tính cá nhân, kiӇu máy chӫ, và kiӇu nӅn tính toán phân tán ( CORBA, OLE / COM, DCE, ….) cho nên Uҩt phù hӧp vӟi ngѭӡi dùng vӟi nhӳng công cө geoprocessing ÿúng (và ÿѭӧc ÿӏnh cӥÿúng) Ĉӕi vӟi nhӳng ngѭӡi dùng cuӕi là nhӳng ngѭӡi hѭӣng lӧi tӕi ѭu, nhұn ÿѭӧc: Sӵ truy nhұp thӡi gian thӵc tӟi mӝt hӋ thӕng vNJ trө thông tin ÿӏa lý lӟn Uӝng hѫn so vӟi hӋ thӕng vNJ trө thông tin ÿӏa lý có thӇ truy cұp ngày nay, nhiӅu ӭng dөng hѫn ( vӟi nhӳng middleware và tài liӋu hӛn hӧp) khai thác thông tin ÿӏa lý, nhӳng khҧ năng làm viӋc vӟi nhӳng kiӇu geodata và ÿӏnh Gҥng khác nhau bên trong mӝt môi trѭӡng ӭng dөng ÿѫn và dòng công viӋc ( workflow ) liên tөc, mà không quan tâm ÿӃn chi tiӃt cӫa nhӳng kiӇu và nhӳng ÿӏnh dҥng này. 5.2.2 Nhӳng dӏch vө OpenGIS (OpenGIS Services ): 7ұp hӧp nhӳng dӏch vөÿѭӧc cҫn ÿӇ: - Truy nhұp và xӱ lý nhӳng kiӇu ÿӏnh nghƭa ÿӗ hӑa ÿӏa lý trong Mô hình Geodata Mӣ. - Cung cҩp nhӳng khҧ năng ÿӇ chia sҿ geodata bên trong nhӳng cӝng ÿӗng ngѭӡi dùng mà sӱ dөng mӝt tұp hӧp chung nhӳng ÿӏnh nghƭa ÿһc tính ÿӏa lý - 79 - và biên dӏch giӳa nhӳng

Các file đính kèm theo tài liệu này:

  • pdfUnlock-18.thegioiforum.comcsdlhuongdoituongPERST.pdf