- 1 -
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
KHOA CÔNG NGHỆ THÔNG TIN
TIỂU LUẬN MÔN HỌC
LẬP TRÌNH MẠNG
Đề tài :
GẮN BÓ DỮ LIỆU TRONG CSDL PHÂN TÁN
VIẾT CHƯƠNG TRÌNH MINH HỌA
GVHD : PGS. TS. Lê Văn Sơn
HVTH : VŨ VƯƠNG DUY
VŨ CA GIÁP
LỚP : Cao học khóa 11 (2009 - 2010)
MỤC LỤC
LỜI MỞ ĐẦU
HVTH: Vũ Vương Duy – Vũ Ca Giáp
Đà Nẵng, tháng 3/2010
- 2 -
I. MỘT SỐ KHÁI NIỆM VÀ GIẢI THUẬT ĐẢM BẢO TÍNH GẮN BÓ TRONG
CSDL PHÂN TÁN 4
I.1 Khái niệm giao dịch: 4
I.2 Các tính chất của giao dịch: 4
I.3 Các loại giao dịch 5
I.3.1 Giao dịch phẳng: 5
I.3.2 Giao dịch lồng: 5
I. 4. Giải thuật hai pha tuyến tính : 6
II. ĐẶT VẤN ĐỀ VÀ GIẢI QUYẾT VẤN ĐỀ 7
1. Sử dụng ngôn ngữ java để xây dựng chương trình 7
2. Thiết kế cơ sở dữ liệu 7
2.1. Thiết kế cơ sở dữ liệu 8
2.2. Đăng kết với ODBC 8
người muốn tìm hiểu về lập trình mạng bằng Java.
Tôi xin chân thành cảm ơn TS Lê Văn Sơn và các bạn lớp Khoa học máy tính
khoá 11 (2009 – 2011) - Đại học Đà Nẵng đã giúp tôi hoàn thành tiểu luận này.
Học viên thực hiện: Vũ Vương Duy – Vũ Ca Giáp
HVTH: Vũ Vương Duy – Vũ Ca Giáp
- 4 -
I. MỘT SỐ KHÁI NIỆM VÀ GIẢI THUẬT ĐẢM BẢO TÍNH GẮN BÓ
TRONG CSDL PHÂN TÁN
I.1 Khái niệm giao dịch:
Giao dịch là một đơn vị tính toán nhất quán và đáng tin cậy. Vì thế về mặt trực
quan, một giao dịch nhận một CSDL, thực hiện một hành động trên CSDL và sinh ra
một bản CSDL mới, gây ra một dịch chuyển trạng thái. Điều này tương tự như điều mà
câu vấn tin thực hiện, ngoại trừ trường hợp nếu CSDL nhất quán trước khi thực hiện
giao dịch thì cũng sẽ nhất quán vào lúc kết thúc, cho dù : (1) giao dịch có thể thực hiện
đồng thời với những giao dịch khác. (2) có xảy ra sự cố trong lúc thực hiện giao dịch.
I.2 Các tính chất của giao dịch:
Các khía cạnh nhất quán và khả tín của giao dich là do 4 tính chất: tính nguyên tử
(atomicity), tính nhất quán (consistency), tính biệt lập (isolation) và tính bền vững; và
thường được gọi chung là tính chất ACID của giao dịch.
Tính nguyên tử:
Tính nguyên tử liên quan đến sự kiện là một giao dịch được xử lý như một
đơn vị hoạt tác. Chính vì thế mà các hành động của giao dịch, hoặc tất cả đều
hoàn tất hoặc không một hành động nào hoàn tất.
Tính nhất quán:
Tính nhất quán của một giao dịch chỉ đơn giản là tính đúng đắn của nó. Nói
cách khác, một giao dịch là một chương trình đúng đắn, ánh xạ CSDL từ trạng
thái nhất quán này sang trạng thái nhất quán khác
Tính biệt lập:
Biệt lập là tính chất của các giao dịch, đòi hỏi mỗi giao dịch phải luôn nhìn
thấy CSDL nhất quán. Nói cách khác, một giao dịch đang thực thi không thể làm
chúng cung cấp một mức độ đồng thời cao cho các giao dịch. Vì một giao dịch có
chứa đựng một số giao dịch khác, tính đồng thời là cao hơn ngay bên trong một
giao dịch. Thí dụ nếu giao dịch đăng ký tua du lịch được cài đặt như giao dịch
phẳng, rất có thể chúng ta không truy xuất được các mẫu tin về tour cụ thể nào đó
cùng một lúc. Nói cách khác, nếu một công ty du lịch đưa ra giao dịch đăng ký một
tua du lịch, bất kỳ một giao dịch đồng thời khác muốn truy xuất tua đó đều phải đợi
cho đến khi kết thúc giao dịch đầu tiên mà trong đó nó gồm cả các công việc đặt
phòng khách sạn và mướn xe ngoài việc tua. Tuy nhiên, một cài đặt lồng sẽ cho
phép giao dịch thứ hai truy xuất dữ liệu về tua ngay khi giao dịch con Tour của
HVTH: Vũ Vương Duy – Vũ Ca Giáp
- 6 -
giao dịch đăng ký tua du lịch thứ nhất hoàn tất. Nói cách khác, chúng ta có thể thực
hiện một mức đồng bộ hóa chi tiết hơn giữa các giao dịch đồng thời.
Ưu điểm thứ hai của giao dịch lồng là khả năng khôi phục. Chúng ta có thể
khôi phục một cách độc lập cho mỗi giao dịch con sau khi gặp sự cố. Điều này hạn
chế những tổn hại một phần trong các giao dịch nhỏ khiến chi phí khôi phục thấp
hơn. Trong một giao dịch phẳng, nếu một thao tác nào bị thất bại, toàn bộ giao dịch
đều bị hủy bỏ và khởi động lại, còn trong một giao dịch lồng, nếu một thao tác thất
bại, chỉ giao dịch con chứa thao tác đó cần phải hủy bỏ và khởi động lại.
Nhằm duy trì tính chất nguyên tử và tính chất bền vững của các giao dịch phân
tán, các nhà nghiên cứu đã đưa ra một số thuật toán, trong đó có giải thuật hai pha
tuyến tính (linear 2PC) (cũng được gọi là nghi thức 2PC lồng)[Gray, 1979]
I. 4. Giải thuật hai pha tuyến tính :
Chúng ta giả thiết rằng, tại vị trí nguồn của giao dịch một tiến trình thực hiện các
thao tác của nó, tiến trình này được gọi là điều phối viên (Coordinator). Điều phối viên
trao đổi với các thành viên (Participant) tại những vị trí có tham gia vào việc thực hiện
các thao tác của giao dịch.
Có một thứ tự giữa các vị trí trong hệ thống dành cho việc giao tiếp. Chúng ta hãy
giả thiết rằng thứ tự giữa các vị trí có tham gia vào việc thực hiện một giao dịch là 1, 2,
…, N với điều phối viên là vị trí đầu tiên trong thứ tự này. Nghi thức 2PC được cài đặt
trình thực hiện
1. Sử dụng ngôn ngữ java để xây dựng chương trình
Các đặc điểm của java có thể tóm gọn trong một câu như sau: “Java là một ngôn
ngữ đơn giản, hướng đối tượng, phân tán, thông dịch mạnh mẽ, bảo mật, cấu trúc độc
lập, khả chuyển, hiệu quả cao và linh động”
Để soạn thảo một chương trình java có thể sử dụng nhiều trình biên soạn khác
nhau như Notepad, Jcreator, Editplus, NetBeans, Jbuilder, VisualAge
Sau khi soạn thảo chương trình java, có thể sử dụng trình biên dịch JDK hoặc
SDK để dịch và chạy chương trình.
2. Thiết kế cơ sở dữ liệu
Yêu cầu đầu tiên của bài toán là phải có một hệ thống cơ sở dữ liệu. Cơ sở dữ
liệu này sẽ phối hợp với một hoạt động cập nhật, tra cứu thông tin từ xa.
HVTH: Vũ Vương Duy – Vũ Ca Giáp
1 2 3 4 5 N
prepare VC/VA VC/VA VC/VA VC/VA
GC/GA GC/GA GC/GA GC/GA GC/GA
Pha 1
Pha 2
- 8 -
Trong tiểu luận này, Cơ sở dữ liệu được thiết kế không nhằm mục đích quản lý
mà chỉ mô phỏng cho yêu cầu về cập nhật, tra cứu thông tin. Do đó có thể thiết kế rất
đơn giản.
Ở đây có thể kết nối cơ sở dữ liệu đơn giản như sau:
2.1. Thiết kế cơ sở dữ liệu
- Thiết kế cơ sở dữ liệu Books sử dụng hệ quản trị cơ sở dữ liệu Access
- Cơ sở dữ liệu Books sẽ bao gồm table Books
- Table Books gồm một trường Maso để lưu các mã số về các cuốn sách
2.2. Đăng kết với ODBC
Trong Tiểu luận này ta dùng Cơ chế ODBC (Open Database Connectivity) để kết
nối đến Cơ sở dữ liệu. ODBC là một giao tiếp phổ biến nhất trong thế giới các máy
“myLoginName”: là tên người dùng khi đăng nhập vào CSDL
“myPassword”: là mật khẩu người dùng khi đăng nhập vào CSDL
c. Tạo đối tượng Statement
Tất cả các lệnh dùng để tác động lên CSDL đều phải thông qua đối tượng
Statement hoặc một đối tượng cùng tính chất như PreparedStatement hay
CallableStatement
Tạo đối tượng Statement từ kết nối conn:
Statement stmt = conn.createStatement();
Hoặc
CallableStatement Callstmt=conn.prepareCall();
PreparedStatement Prepstmt=conn.prepareStatement();
Gọi thực thi lệnh sql như sau:
Statement stmt=conn.createStatement();
stmt.executeUpdate(sSQL);
với sSQL là câu lệnh sql
Kết nối cơ sở dữ liệu sử dụng trong bài toán
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connectionknoi=DriverManager.getConnection("jdbc:odbc:DSNThuVi
en");
HVTH: Vũ Vương Duy – Vũ Ca Giáp
- 10 -
Statement lenhSQL = knoi.createStatement();
}
catch(ClassNotFoundException ex){
}
catch(SQLException ex){
}
3. Mô hình Client/Server
3.1. Xây dựng hệ đơn Server theo mô hình Client/Server thường gặp
MultipleSocketServer
Kết
thúc
Bắt
đầu
Tạo kết nối với CSDL
Nhận thông tin từ Client
Thực thi việc Nhập, sửa, xoá, xuất
thông tin theo thông tin nhận được
Gửi kết quả về cho Client
Kết
thúc
- 13 -
3.3. Xây dựng Client
Sơ đồ khối cho chương trình chính của Client như sau:
3.4. Xây dựng Monitor để Manager hệ thống
Monitoring thực hiện các công việc sau:
- Quan sát các Client kết nối vào Server
- Quan sát các công việc mà các client thực hiện trên cơ sở dữ liệu
Để đảm bảo Monitoring luôn nhận được thông tin về các hoạt động truy xuất dữ
liệu giữa Client/Server, các hoạt động về việc kết nối và truy xuất dữ liệu sẽ được ghi
vào file txtketnoi.txt và txtthaotac.txt.
HVTH: Vũ Vương Duy – Vũ Ca Giáp
Bắt
đầu
Tạo giao diện
Kết nối đến Server
Thực hiện yêu cầu thêm,
sửa, xoá, xuất trên giao diện
Chuyển yêu cầu đến
Nhận kết quả từ Server, xuất
kết quả ra màn hình
Kết
thúc
- 15 -
Trong quá trình cập nhật dữ liệu, nếu ta không muốn thực thi các cập nhật, ta có
thể gọi lệnh rollback. Lúc này các trường (field) sẽ nhận lại các giá trị trước khi các
lệnh cập nhật được gọi. Rollback một transaction là cách tốt nhất cho phép ta kiểm
soát các thay đổi của dữ liệu, giá trị nào đã commit hay chưa. Ta cần thực hiện
rollback ngay khi nhận được ngoại lệ SQLException. Vì khi nhận được ngoại lệ này,
ta chỉ có thể biết là có một cái gì đó không đúng nhưng không thể chỉ ra được là cái gì
đó đã commit hay chưa.
III. MỘT SỐ KẾT QUẢ THỬ NGHIỆM
1/ Server sau khi khởi động sẽ đợi các kết nối từ Client:
HVTH: Vũ Vương Duy – Vũ Ca Giáp
Tạo Connection
Chấm dứt auto-commit
Các lệnh SQL Update,
Insert, Delete
commit
commit
Các lệnh SQL Update,
Insert, Delete
TransactionTransaction
Transaction
- 16 -
2/ Khi Client kết nối vào Server
Lưu ý là có thể nhiều Client kết nối vào Server một cách đồng thời, ngẫu nhiên,
đa truy cập.
Client:
- Kích nút “Xuat” để xem tất cả các sách hiện có.
7/ Monitoring kết nối vào Server
HVTH: Vũ Vương Duy – Vũ Ca Giáp
- 20 -
8/ Monitoring kiểm tra các kết nối
Thao tác: Kích nút “KT ket noi”, Monitoring sẽ hiển thị tất cả các Client kết nối
vào Server
9/ Monitoring kiểm tra các thao tác
Thao tác: Kích nút “KT thao tac”, Monitoring sẽ hiển thị tất cả các hoạt động mà
Client thực hiện trên cơ sở dữ liệu:
HVTH: Vũ Vương Duy – Vũ Ca Giáp
- 21 -
HVTH: Vũ Vương Duy – Vũ Ca Giáp
- 22 -
KẾT LUẬN
Trong tiểu luận này đã giải quyết các vấn đề cơ bản đặt ra ban đầu như:
Thực hiện kết nối Client/Server, trong đó một Server có thể nhận kết nối từ
nhiều Client cùng lúc.
Mỗi Client có thể kết nối vào cơ sở dữ liệu tại Server và thực hiện các hoạt
động thêm, sửa, xoá, xuất, thoát. Quá trình này có kiểm tra tính gắn bó về dữ liệu.
Xây dựng Monitoring dùng để kiểm tra quá trình cập nhật dữ liệu
Chương trình được xây dựng bằng ngôn ngữ Java.
Tuy nhiên, do bản thân mới bước đầu tìm hiểu và làm quen với ngôn ngữ lập
trình Java nên chương trình được viết chưa tối ưu, chưa khai thác hết được những đặc
điểm nổi trội của ngôn ngữ Java như: Giao diện chương trình, kế thừa, đóng gói, tính
mềm dẻo,
Hy vọng rằng trong thời gian đến, khi tìm hiểu sâu hơn về Java, bản thân cũng
như các bạn trong lớp sẽ có những kỹ năng tốt hơn về Lập trình bằng ngôn ngữ Java
để phục vụ tốt hơn cho công việc của mình.
HVTH: Vũ Vương Duy – Vũ Ca Giáp