Đ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ệngiao 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ó t
Trang 1MỤC LỤC
LỜI MỞ ĐẦU
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 3
I.1 Khái niệm giao dịch: 3
I.2 Các tính chất của giao dịch: 3
I.3 Các loại giao dịch 4
I.3.1 Giao dịch phẳng: 4
I.3.2 Giao dịch lồng: 4
I 4 Giải thuật hai pha tuyến tính : 5
II ĐẶT VẤN ĐỀ VÀ GIẢI QUYẾT VẤN ĐỀ 6
1 Sử dụng ngôn ngữ java để xây dựng chương trình 6
2 Thiết kế cơ sở dữ liệu 6
2.1 Thiết kế cơ sở dữ liệu 7
2.2 Đăng kết với ODBC 7
2.3 Kết nối cơ sở dữ liệu trong java 7
3 Mô hình Client/Server 9
3.1 Xây dựng hệ đơn Server theo mô hình Client/Server thường gặp 9
3.2 Xây dựng Server 11
3.3 Xây dựng Client 12
3.4 Xây dựng Monitor để Manager hệ thống 12
4 Kiểm tra tính gắn bó dữ liệu 13
III MỘT SỐ KẾT QUẢ THỬ NGHIỆM 14 KẾT LUẬN
TÀI LIỆU THAM KHẢO
Trang 2LỜI MỞ ĐẦU
Với sự phát triển của khoa học và kỹ thuật, ngày nay các mạng máy tính đã pháttriển một cách nhanh chóng và đa dạng cả về quy mô, hệ điều hành và ứng dụng Khithông tin có thể được sử dụng chung thì nó mang lại cho người sử dụng khả năng tổchức lại các công việc với những thay đổi về chất như:
- Ðáp ứng những nhu cầu của hệ thống ứng dụng kinh doanh hiện đại
- Cung cấp sự thống nhất giữa các dữ liệu
- Tăng cường năng lực xử lý nhờ kết hợp các bộ phận phân tán
- Tăng cường truy nhập tới các dịch vụ mạng khác nhau đang được cung cấp trênthế giới
Thông qua môi trường mạng, con người có thể giao tiếp với nhau và chia sẻthông tin dữ liệu dù ở khoảng cách rất xa Vấn đề đặt ra là làm sao phải đảm bảo dữliệu trên mạng phải thống nhất Đây cũng chính là một trong những yêu cầu chính củalĩnh vực Lập trình mạng
Nội dung chủ yếu trình bày trong tiểu luận này là giải quyết một vấn đề về lậptrình mạng, đó là chia sẻ cơ sở dữ liệu giữa các đối tượng ở xa nhau và đảm bảo tínhgắn bó của dữ liệu Chương trình được viết trên ngôn ngữ Java và sử dụng Hệ quản trị
cơ sở dữ liệu Access Chương trình có thể được sử dụng để tham khảo đối với nhữngngườ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ínhkhoá 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: Trần Tấn Nha
Trang 3I 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ựcquan, một giao dịch nhận một CSDL, thực hiện một hành động trên CSDL và sinh ramộ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ệngiao 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ả đềuhoà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óicách khác, một giao dịch là một chương trình đúng đắn, ánh xạ CSDL từ trạngthái nhất quán này sang trạng thái nhất quán khác
Trang 4I.3 Các loại giao dịch
Các giao dịch lồng đã được chú ý như một khái niệm giao dịch tổng quáthơn Mức độ lồng nói chung là để ngỏ, cho phép các giao dịch con cũng có thể
có các giao dịch lồng Tính tổng quát này có ích trong các lĩnh vực ứng dụng
mà ở đó các giao dịch phức tạp hơn so với việc xử lý dữ liệu truyền thống.Giao dịch lồng có thể phân loại thành: kiểu lồng đóng (closed nesting) và kiểulồng mở (open nesting) do các đặc trưng kết thúc của chúng Các giao dịch lồngđóng ủy thác theo lối từ dưới lên đến gốc Vì thế một giao dịch con lồng bắt đầusau cha và hoàn tất trước nó, và việc ủy thác giao dịch con phụ thuộc vào việc ủythác của giao dịch cha Ngữ nghĩa của những giao dịch này cưỡng chế tính nguyên
tử tại mức trên cùng Kiểu lồng mở nới lỏng sự hạn chế về tính nguyên tử của củacác giao dịch lồng đóng Vì thế một giao dịch lồng mở cho phép bên ngoài giaodịch thấy được các kết quả một phần của nó
Ưu điểm của các giao dịch lồng biểu hiện qua những điểm sau: trước tiên,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ộtgiao dịch Thí dụ nếu giao dịch đăng ký tua du lịch được cài đặt như giao dịchphẳ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ộttua 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 đợicho đến khi kết thúc giao dịch đầu tiên mà trong đó nó gồm cả các công việc đặtphò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ẽ chophép giao dịch thứ hai truy xuất dữ liệu về tua ngay khi giao dịch con Tour của
Trang 5giao 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ựchiệ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ạnchế 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ấphơ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ấtbạ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ântán, các nhà nghiên cứu đã đưa ra một số thuật toán, trong đó có giải thuật hai phatuyế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ácthao 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êntrao đổ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ệncá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
bằng cách trong pha đầu tiên truyền tới [ tính từ điều phối viên (số 1) đến N] và trongpha thứ hai truyền ngược từ N về điều phối viên Thuật toán 2PC tuyến tính hoạt độngtheo cách sau:
Điều phối viên gửi thông báo prepare đến thành viên 2 Nếu thành viên 2 chưa sẵnsàng ủy thác giao dịch, nó gửi thông báo biểu quyết hủy bỏ vote-abort (VA) và giaodịch bị hủy tại thời điểm này (hủy bỏ đơn phương của 2) Ngược lại nếu thành viên 2đồng ý ủy thác, nó gửi thông báo vote-commit(VC) cho thành viên 3 rồi chuyển sangtrạng thái READY Quá trình này tiếp tục cho đến khi một biểu quyết ủy thác đến đượcthành viên N Đến đây kết thúc pha đầu tiên Nếu N quyết định ủy thác, nó gửi chothành viên N-1 thông báo global-commit (GC); bằng không, nó gửi một thông báo toàncục global-abort(GA) Theo đó các thành viên sẽ chuyển sang trạng thái thích hợp(COMMIT hoặc ABORT) và làm lan truyền thông báo trở về điều phối viên Thuật
Pha 1
Pha 2
Trang 6toán được mô tả trong hình 1:
Hình 1: Cấu trúc giao tiếp 2PC tuyến tínhVC: vote-commmit; VA: vote-abort; GC: global commit; GA: global-abort
II ĐẶT VẤN ĐỀ VÀ GIẢI QUYẾT VẤN ĐỀ
Giả sử rằng ta có hệ thống CSDL phối hợp với một hoạt động được gọi từ xanhằm phục vụ cho việc cập nhật hay tra cứu thông tin cần thiết Hãy viết chương trìnhtrên ngôn ngữ Java cho phép cập nhật CSDL có kiểm tra tính gắn bó
1 Đây là hệ đơn Server, có thể hoạt động theo mô hình Client/Server thường gặp
2 Viết chương trình theo kiểu đa truy cập, ngẫu nhiên, từ xa với số lượng truycập lớn
3 Xây dựng Monitoring để Manager hệ thống có thể kiểm tra và điều khiển quá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ônngữ đơ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 độclậ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ácnhau 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ặcSDK để 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
Pha 1
Pha 2
Trang 7Trong 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ếtnố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áytính cá nhân và dần dần đi vào các môi trường khác ODBC là một cài đặt của hãngMicrosoft cung cấp các hàm cho phép các ngôn ngữ lập trình truy cập vào CSDL
Để tạo một kết nối ODBC trên một máy tính, ta thực hiện các bước sau:
- Vào Control Panel chọn Data Sources (ODBC) 32 bit (Win 98, Me) hoặc vàoControl Panel/ Administrative Tools chọn Data Sources (ODBC) (Win NT, 2000, XP)
- Chọn tab System DSN, Click vào button Add, chọn phương thức điều khiển
dữ liệu dăng kết: Driver do Microsoft Access, Click
Finish. Bạn sẽ thấy một cửa sổ hiện ra, Click vào Select và chọn file Access, (trongtrường hợp này là Books.mdb), bấm vào sau đó Click vào button OK Nhập TextboxData Source Name : DSNThuVien Sau đó chọn OK Như vậy là bạn đã hoàn thànhviệc đăng kết Access thông qua ODBC
2.3 Kết nối cơ sở dữ liệu trong java
a Nạp trình điều khiển
Cấu trúc lệnh :
Class.forName("myDriver.ClassName");
Trong đó:
myDriver: tên trình điều khiển
ClassName: tên của Class tương ứng
Trang 8Trong đó:
url: là một chuỗi nêu lên đặc điểm của CSDL có dạng: jdbc:subprotocol:subname subprotocol: là giao thức con tương ứng với loại CSDL
subname: là tên CSDL (DataSource)
“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:
Trang 9Statement lenhSQL = knoi.createStatement();
3.1 Xây dựng hệ đơn Server theo mô hình Client/Server thường gặp
Trong mô hình này, chương trình ứng dụng được chia thành 2 thành phần:
- Quá trình chuyên cung cấp một số phục vụ nào đó, chẳng hạn: phục vụ tập tin,phục vụ máy in, phục vụ thư điện tử, phục vụ Web Các quá trình này được gọi là cáctrình phục vụ hay Server
- Một số quá trình khác có yêu cầu sử dụng các dịch vụ do các server cung cấpđược gọi là các quá trình khách hàng hay Client
Việc giao tiếp giữa client và server được thực hiện dưới hình thức trao đổi cácthông điệp (Message) Để được phục vụ, client sẽ gởi một thông điệp yêu cầu (RequestMessage) mô tả về công việc muốn server thực hiện Khi nhận được thông điệp yêucầu, server tiến hành phân tích để xác định công việc cần phải thực thi Nếu việc thựchiện yêu cầu này có sinh ra kết quả trả về, server sẽ gởi nó cho client trong một thôngđiệp trả lời (Reply Message) Dạng thức (format) và ý nghĩa của các thông điệp
Trang 113.2 Xây dựng Server
- Sơ đồ khối cho chương trình chính của Server như sau:
- Tuy nhiên đây là chương trình đa truy cập, ngẫu nhiên, từ xa với số lượng truycập lớn, do đó phải xây dựng một Server có thể nhận kết nối từ nhiều Client cùng lúc
Sơ đồ khối cho MultipleSocketServer:
HVTH: Trần Tấn Nha
Bắt đầuTạo giao diệnĐợi kết nối từ các Client
Nhận kết nối
Sai
ĐúngTạo một Thread mới cho MultipleSocketServer
Kết thúc
Bắt đầuTạo kết nối với CSDLNhậ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 đượcGửi kết quả về cho Client
Kết thúc
11
Trang 123.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 ghivào file txtketnoi.txt và txtthaotac.txt
Bắt đầuTạo giao diệnKế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
Server
Nhận kết quả từ Server, xuất kết quả ra màn hình
Kết thúc
Trang 134 Kiểm tra tính gắn bó dữ liệu
Cho một hệ thống cho phép cập nhật thông tin hay tra cứu thông tin cần thiết.Thông thường một ứng dụng nhiều người dùng (multiuser application) làm việc vớiCSDL, ta sẽ gặp phải trường hợp hai người cùng truy xuất và cập nhật trên cùng một
dữ liệu Ta gọi đó là trạng thái xung đột Và khi đó số liệu dễ bị sai lạc và làm mất tínhtoàn vẹn, gắn bó của dữ liệu Do đó, mỗi khi cập nhật thông tin hay tra cứu thông tin,phải kiểm tra để xác định quyền truy cập để đọc hay sửa đổi nội dung các bảng cơ sở
dữ liệu Chỉ cho phép cập nhật khi không có truy vấn nào đang tiến hành
Các hệ CSDL có hỗ trợ transaction sẽ sử dụng cơ chế lock, khoá các khối dữ liệuđang ở trong một transaction ngăn không cho các truy cập từ những người dùng khác.Trong java, khi chế độ Auto-Commit được mở, mỗi câu lệnh được xem như mộttransaction và được commit tức thời sau khi thực hiện xong, thì việc lock dữ liệu sẽđược gọi trong từng câu lệnh Tác dụng của việc lock dữ liệu là giúp người dùngkhông phải nhận những giá trị sai hay những giá trị chưa được xác lập
Có thể biểu diễn quá trình transaction như sau:
HVTH: Trần Tấn Nha
Bắt đầuTạo giao diệnKết nối đến Server
Thực hiện yêu cầu kiểm tra kết nối, kiểm tra thao tác, thoát
Chuyển yêu cầu đến
Server
Nhận kết quả từ Server, xuất kết quả ra màn hình
Kết thúc
13
Trang 14Trong 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áclệnh cập nhật được gọi Rollback một transaction là cách tốt nhất cho phép ta kiểmsoát các thay đổi của dữ liệu, giá trị nào đã commit hay chưa Ta cần thực hiệnrollback 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:
Tạo ConnectionChấm dứt auto-commit
Các lệnh SQL Update, Insert, Delete
commit
commit
Các lệnh SQL Update, Insert, Delete
Transaction
Transaction