Dữ liệu đƣợc lấy từ các CSDL khác nhau và đƣợc kết hợp dựa vào sự mô tả truy vấn liên hợp. Trong việc liên hợp CSDL, các bản ghi đƣợc lấy từ mỗi CSDL đƣợc lƣu trữ trong file mô tả dữ liệu liên hợp. Sau khi có đƣợc hệ thống các tập dữ liệu nó sẽ tích hợp chúng để có đƣợc khung nhìn tích hợp cuối cùng.
Hình 21: Xử lý truy vấn
Tầng tích hợp CSDL phân tích khung nhìn liên hợp thành các truy vấn con mà mỗi CSDL có thể thực thi một cách độc lập.
Lớp ObjectDeescriptionEditor là giao diện ngƣời dùng để đọc file tham số cấu hình xác định bởi ngƣời dùng. Sử dụng thông tin đƣợc trích xuất một trƣờng hợp của lớp MYView sẽ đƣợc tạo ra. Lớp XMLprocessor sẽ đƣợc sử dụng để trích xuất thông tin từ file cấu hình. Sử dụng lớp MyView, IntegrationMain để tạo ra các câu lệnh có thể thực thi tại mỗi kết nối.
3.4.5. Tầng lƣu trữ trung gian
Các kết quả có đƣợc từ việc xử lý các câu truy vấn đƣợc lƣu lại trong một CSDL nhúng. Việc lƣu lại dữ liệu trong một CSDL nhúng cho phép xử lý dữ liệu một cách dễ dàng hơn.
Hình 22: Dữ liệu đƣợc lƣu trữ trong CSDL nhúng
Trong pha chuyển đổi (transform) của quá trình ETL, dữ liệu đã trích xuất đƣợc lƣu trữ trung gian, và nhƣ vậy chúng ta cần áp dụng một số các phép toán nhƣ GROUP, tính tổng, và lọc để biến đổi dữ liệu. Vì vậy cuối cùng yêu cầu chặt chẽ hơn để xem xét dữ liệu đƣợc lƣu trữ nhƣ là CSDL khác. Do đó CSDL nhúng đƣợc sử dụng để lƣu trữ dữ liệu trung gian, CSDL nhúng Derby đƣợc lựa chọn là CSDL lƣu trữ trung gian. Apache Derby là một CSDL quan hệ mã nguồn mở đƣợc viết hoàn toàn bằng JAVA. Apache Derby phiên bản 2.0 có các thuộc tính mà phù hợp với các yêu cầu hệ thống tích hợp dữ liệu. Apache Derby dựa trên JAVA, JDBC và các chuẩn SQL.
Lớp lƣu trữ trung gian phân cấp bao gồm ba lớp chính “InterMstoreManager" trong lớp khởi tạo, đón nhận các yêu cầu ngƣời dùng và chuyển hƣớng tùy theo loại yêu cầu. Lớp IntermediateStorage về cơ bản xử lý, quản lý kết nối và lớp
ExecuteQueryOnInterMDB cho việc thực thi các truy vấn trên CSDL derby.
3.4.7. Các tiện ích
Tầng này bao gồm tiên tích để truy vấn đến các dữ liệu đã đƣợc kết nối và các tiện ích khác.
3.5. THIẾT KẾ GIAO DIỆN ỨNG DỤNG
Việc thiết kế giao diện ứng dụng đồ họa (GUI) cho công cụ phần mềm tích hợp CSDL sẽ tập trung vào thiết kế giao diện cơ bản nhất để có thể làm việc đƣợc với một số CSDL phổ biến. Và giả thiết là các ngƣời dùng đã đƣợc làm quen với một số sản phẩm phần mềm. Do đó kiểu giao diện ngƣời dùng IDE (Integrated Development Environment) sẽ đƣợc thiết kế nhƣ giao diện chính của công cụ tích hợp này.
Giao diện chính của chƣơng trình sẽ bao gồm ba phần chính: Thanh menu, panel bên trái của khung nhìn dạng cây (tree) của các CSDL đƣợc kết nối và khu vực bên phải. Tất cả cửa sổ chức năng đƣợc mở bên trong giao diện chính.
3.6. MÔI TRƢỜNG PHÁT TRIỂN HỆ THỐNG
Công cụ phần mềm về giải pháp tích hợp CSDL đƣợc thiết kế, xây dựng trên các môi trƣờng phát triển hệ thống nhƣ sau:
Stt Tên Mô tả
1 Hệ điều hành Windows server 2003
2 Môi trƣờng phát triển tích hợp NetBeans IDE 7.0
Database connection | Integration | Query |... + Database 1 --Table 1 -- Table 2 ... + Database 2 --Table 1 -- Table 2 ... + Database 3
Khu vực thể hiện kết quả thực thi các chức năng của hệ thống
3 Ngôn ngữ lập trình JAVA
4 Java Virtual machine JDK 1.6.0
5 Hệ quản trị CSDL MySQL server, MSSQL server
3.7. LẬP TRÌNH
Thực hiện viết mã cho công cụ phần mềm tích hợp CSDL bằng ngôn ngữ lập trình JAVA. JAVA là ngôn ngữ lập trình hƣớng đối tƣợng đƣợc sử dụng phổ biến nhất hiện nay trong việc xây dựng các ứng dụng.
Một số modul trong chƣơng trình:
- Modul kết nối đến các CSDL:
package dbinterface; import java.sql.*; import java.util.*;
public interface Database {
public Vector getTableNames(String schema); public Connection getConnection();
public boolean executeStmt(String sql) throws Exception; public ResultSet getResulst(String sql);
public void closeConnection();
public Vector getColumnslist(String table); public ResultSet getResulst_with_con(String sql); }
// Modul kết nối đến CSDL Mysql server:
package dbinterface; import java.sql.*; import java.util.*;
public class MySQLinterface implements Database{ public Connection con;
public String uname; public String password;
security.PasswordEncDec passdec = new security.PasswordEncDec(); public MySQLinterface(String con,String username,String pass){
con_string = con; uname = username ;
password = passdec.decrypt(pass) ; }
public Connection getConnection() { Connection con = null;
try {
String driver = "com.mysql.jdbc.Driver"; Class.forName(driver);
//String url = "jdbc:mysql://localhost/test"; String url = con_string;
System.out.println(url + "--- " + uname +" -- " + password); con =DriverManager.getConnection( url, uname, password ); } catch (Exception e) {
System.out.println("Error loading MYsql Connection " + e.toString()); }
return con; }
public void closeConnection() {
try{
con.close();
}catch(Exception e) {
System.out.println("Error closing mySQL " + e.toString()); }
}
public boolean executeStmt(String sql)throws Exception {
Connection pcon = getConnection(); Statement st = pcon.createStatement(); ok = st.execute(sql); pcon.commit(); pcon.close(); return ok; }
public ResultSet getResulst_with_con(String sql) { ResultSet rs=null; try{ con = getConnection(); Statement stmt = con.createStatement(); rs = stmt.executeQuery(sql); }catch(Exception e) {
System.out.println("Error generating Result - " + sql + e.toString()); }
return rs; }
public ResultSet getResulst(String sql) { ResultSet rs=null; try{ Statement stmt = con.createStatement(); rs = stmt.executeQuery(sql); }catch(Exception e) {
System.out.println("Error generating Result - " + sql + e.toString()); }
return rs; }
{
con = getConnection(); Vector vec = new Vector();
//vec.add(new String("MYSQLtest")); try{
String sql = "SELECT TABLE_NAME FROM information_schema.`TABLES` where TABLE_SCHEMA='" +schema+"' ";
ResultSet rs= getResulst(sql); while(rs.next())
{
System.out.println("getting table names"); vec.add(new String(rs.getString(1))); }
}catch(Exception e) {
System.out.println(" Error getting table names MYSQL " + e.toString()); }
return vec; }
public Vector getColumnslist(String table) {
Vector vec = new Vector(); try{
con = getConnection();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("DESCRIBE " + table); DatabaseMetaData dbm = con.getMetaData();
ResultSet rs1 = dbm.getColumns(null, "%", table, "%"); while (rs1.next()) {
String col_name = rs1.getString("COLUMN_NAME"); String data_type = rs1.getString("TYPE_NAME"); vec.add(new String(col_name + ":" + data_type)); int data_size = rs1.getInt("COLUMN_SIZE"); int nullable = rs1.getInt("NULLABLE");
System.out.print(col_name + "\t" + data_type + "(" + data_size + ")" + "\t"); if (nullable == 1) { System.out.print("YES\t"); } else{ System.out.print("NO\t"); } System.out.println(); } closeConnection(); }catch(Exception e) {
System.out.println(" Error getting colomn names " + e.toString()); }
return vec; }
}
3.8. KẾT QUẢ THỬ NGHIỆM GIẢI PHÁP TÍCH HỢP DỮ LIỆU
Công cụ tích hợp CSDL đƣợc xây dựng cho phép tích hợp các CSDL từ các nguồn khác nhau thuộc các hệ quản trị CSDL khác nhau nhƣ: Oracle, MS SQL Server, MySQL server và PostgresSQL server.
3.8.1. Một số giao diện trong chƣơng trình
Hình 24: Giao diện chính của chƣơng trình - Giao diện kết nối đến cơ sở dữ liệu:
- Giao diện trích xuất dữ liệu từ CSDL:
Hình 26: Giao diện trích xuất dữ liệu từ CSDL - Giao diện tích hợp dữ liệu:
Hình 27: Giao diện tích hợp dữ liệu - Giao diện tiện ích truy vấn đến các CSDL đã kết nối:
Hình 28: Giao diện tiện ích truy vấn đến các CSDL đã kết nối
3.8.2. Kết quả đạt đƣợc
Trong kết quả DEMO của chƣơng trình đã thực hiện thử nghiệm chƣơng trình bằng việc tích hợp các thủ tục hành chính từ hai nguồn khác nhau của hai hệ quản trị CSDL là MySQL server và MS SQL server.
Kết quả của việc tích hợp đó đƣợc lƣu trữ trong kho CSDL tích hợp về thủ tục hành chính nhằm phục vụ cho việc xử lý truy vấn, phân tích, khai thác và sử dụng với nhiều mục đích khác nhau nhƣ: Xây dựng các dịch vụ hành chính công trực tuyến trên nền CSDL tích hợp phục vụ cho ngƣời dân và doanh nghiệp trong việc thực thi các thủ tục hành chính; cụ thể là dịch vụ hành chính công về cấp phép đăng ký kinh doanh, dịch vụ cấp sổ hộ khẩu hay sổ đỏ nhà đất...
KẾT LUẬN
- KẾT QUẢ ĐÃ ĐẠT ĐƢỢC
Kết quả mà tôi đã đạt đƣợc là hết sức có ý nghĩa về mặt thực tiễn trong việc nghiên cứu, phân tích, đánh giá để xây dựng giải pháp tích hợp dữ liệu cho một tổ chức, cụ thể đã tiến hành nghiên cứu, phân tích và đánh giá một số kỹ thuật và công nghệ trong việc tích hợp dữ liệu đƣợc sử dụng phổ biến nhất hiện nay.
Qua đó đã vận dụng kết quả nghiên cứu để phân tích, thiết kế và xây dựng một phần mềm dựa trên chuẩn công nghệ ETL (Extract, Transform and Load) để có thể tích hợp các thủ tục hành chính từ các nguồn CSDL khác nhau để xây dựng kho CSDL tích hợp về thủ tục hành chính đƣợc quản lý thống nhất, tập trung phục vụ cho việc xử lý, phân tích và tổng hợp và đặc biệt là ứng dụng để xây dựng các dịch vụ hành chính công trực tuyến phục vụ cho ngƣời dân và doanh nghiệp.
- HƢỚNG PHÁT TRIỂN
Trong phạm vi luận văn này đã thực hiện nghiên cứu, phân tích, đánh giá về một số giải pháp kỹ thuật và Công nghệ đƣợc sử dụng cho việc xây dựng giải pháp tích hợp dữ liệu, qua đó đã thiết kế, xây dựng đƣợc một giải pháp phần mềm phục vụ cho việc tích hợp CSDL từ nhiều nguồn khác nhau của các hệ quản trị CSDL khác nhau. Tuy nhiên ở đây mới chỉ tập trung vào việc nghiên cứu, phân tích và xây dựng giải pháp phần mềm để tích hợp dữ liệu thuộc loại CSDL quan hệ. Vì vậy hƣớng phát triển tiếp theo là sẽ thực hiện nghiên cứu, phân tích một số giải pháp kỹ thuật, công nghệ và xây dựng giải pháp phần mềm phục vụ cho việc tích hợp dữ liệu có cấu trúc và phi cấu trúc.
TÀI LIỆU THAM KHẢO
[1] An Overview of EII Technology and How to Use it - by Pedo, Inc. 2006. [2] Building the Data Warehouse by John Wiley & Sons, 2nd edition, 1996.
[3] Data Integration: Problems, Approaches, and perspectives by Patrick Ziegler and Klaus R. Dittrich.
[4] Database Integration: Criteria and Techniques by Tom Lonski.
[5] Data Integration: Using ETL, EAI, and EII Tools to Create an Integrated Enterprise by Colin White, BI Research 2005.
[6] Enterprise Application Integration Techniques - by James Fenner.
[7] Enterprise Application Integration (EAI) Techniques - by Florence Lin 2005.
[8] Enterprise Information Integration (EII) A Technical Ally of EAI and ETL - by Bipin Chandra Joshi.
[9] Enterprise Information Integration Technology: Architectures, Uses and Abuses - by Mark Madsen.
[10] Extraction, Transformation, and Loading (ETL) - by Panos Vassiliadis and Alkis Simitsis. [11] Service-Oriented Architecture (SOA) and Web Services by Qusay H. Mahmoud
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ------
NGÔ THANH MINH
NGHIÊN CỨU GIẢI PHÁP XÂY DỰNG CƠ SỞ DỮ LIỆU TÍCH HỢP VỀ THỦ TỤC HÀNH
LUẬN VĂN THẠC SĨ
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ------
NGÔ THANH MINH
NGHIÊN CỨU GIẢI PHÁP XÂY DỰNG CƠ SỞ DỮ LIỆU TÍCH HỢP VỀ THỦ TỤC HÀNH
Ngành: Công nghệ thông tin
Chuyên ngành: Hệ thống thông tin Mã số: 604805
LUẬN VĂN THẠC SĨ
NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. Phùng Văn Ổn