Quản lý nhãn thời gian:

Một phần của tài liệu tìm hiểu một số thuật toán điều khiển tương tranh trong cơ sở dữ liệu phân tán (Trang 62 - 77)

6. Cấu trúc luận văn

3.2.3.5.Quản lý nhãn thời gian:

Một nhƣợc điểm của các chƣơng trình TO là tốn quá nhiều bộ nhớ để lƣu trữ các nhãn thời gian. Vấn đề này có thể giải quyết bởi « quên » các nhãn thời gian cũ.

Các nhãn thời gian đƣợc sử dụng trong TO cơ bản để từ chối các phép toán

đến trễ, ví dụ để từ chối một dm-read(x) với nhãn thời gian TS1 mà nó đến sau một

dm-write(x) với nhãn thời gian TS2 trong đó TS1<TS2. Trong trƣờng hợp đặc biệt, TS1 và TS2 có thể khác nhau với bất kỳ giá trị thực nào. Tuy nhiên, trong trƣờng hợp đặc biệt nó không chắc chắn rằng các nhãn thời gian này sẽ khác nhau nhiều hơn một phút. Một cách tuần tự, các nhãn thời gian có thể đƣợc lƣu trữ ở trong các bảng nhỏ mà các bảng đó đƣợc dọn dẹp một cách mặt định.

Các nhãn thời gian của R-ts đƣợc lƣu trữ trong bảng R với mục vào cuả các mẫu <x,R-ts> ; với bất kỳ phần tử dữ liệu x, có ít nhất một mục vào. Sự bổ sung, một giá trị, R-min nói lên giá trị lớn nhất của bất kỳ nhãn thời gian nào mà nó đƣợc dọn dẹp từ bảng. Để tìm R-ts(x), chƣơng trình tìm bảng R từ <x,TS> mục vào. Nếu một mục vào đƣợc tìm thấy, R-ts(x)=TS ngƣợc lại R-ts(x)<=R-min. Để lỗi trên cạnh của safety, chƣơng trình cho R-ts(x)=R-min. Để cập nhật R-ts(x), chƣơng trình sửa đổi mục vào <x,TS> nếu nó tồn tại. Ngƣợc lại một mục vào mới đƣợc tạo ra và thêm vào bảng. Khi bảng R đầy, chƣơng trình sẽ lựa chọn giá trị thích hợp cho R- min và xóa tất cả các mục vào từ bảng với nhãn thời gian nhỏ hơn. Các nhãn thời gian của W-ts cũng đƣợc quản lý tƣơng tự và các kỹ thuật tƣơng tự có thể đƣợc phát minh cho các cơ sở dữ liệu đa phiên bản.

Sự bảo trì các nhãn thời gian với cơ chế tự duy trì TO ít tốn kém, Cơ chế tự duy trì TO đòi hỏi chỉ các toán tử đã gán nhãn, không cần dữ liệu đã gán nhãn. Nếu cơ chế tự duy trì T/O đƣợc sử dụng cho sự đồng bộ rw, các nhãn thời gian của T-ts của các mẫu dữ liệu có thể bị loại bỏ. Nếu cơ chế tự duy trì TO đƣợc sử dụng cho cả sự đồng bộ rw và ww, các nhãn thời gian của W-ts có thể cũng bị loại bỏ.

1.3. Mô phỏng nhiều giao dịch đồng thời trên hệ thống ATM đa ngân hàng.

3.3.1. Giới thiệu chương trình

Chƣơng trình đƣợc đề xuất để mô phỏng lại hoạt động của hệ thống ATM đa ngân hàng.

Các ngân hàng nằm trong hệ thống rút tiền tự động đa ngân hàng này có những trao đổi về dữ liệu của ngƣời sử dụng. Mục đích là để kiểm tra xác thực các thẻ do các ngân hàng khác nhau phát hành khi giao dịch trên các máy ATM do các ngân hàng khác quản lý.

Vấn đề nãy sinh khi, cùng một lúc có nhiều giao dịch cùng thực hiện trên hệ thống đó. Hệ thống phải thực hiện các giao dịch đồng thời một cách hợp lý và chính xác.

3.3.2. Mô tả bài toán

Khi ngƣời sử dụng đƣa thẻ ATM vào máy, thực hiện check-in vào hệ thống ATM, hệ thống sẽ xác thực thẻ thông qua số PIN do ngƣời sử dụng nhập vào. Nếu hệ thống xác nhận thẻ hợp lệ, thì cũng sẽ xác định đƣợc thẻ thuộc ngân hàng nào phát hành. Nếu là thẻ đang nằm trên máy ATM do chính ngân hàng phát hành thẻ quản lý, thẻ sẽ đƣợc thao tác trực tiếp với hệ thống của ngân hàng đó. Nếu thẻ nằm trên máy ATM đƣợc quản lý bởi ngân hàng khác với ngân hàng phát hành thẻ, thì

toàn bộ lệnh thao tác trên thẻ sẽ đƣợc hệ thống tự động định tuyến về “Bộ lập lịch”

tƣơng ứng của ngân hàng phát hành thẻ.

Vì thế sẽ không mất tính tổng quát, nếu ở đây ta xét hoạt động rút tiền – chuyển khoản của các thẻ thao tác trên các máy ATM của một hệ thống ngân hàng phát hành thẻ.

“Bộ quản trị giao dịch” sẽ tiếp nhận các giao dịch do các máy ATM gửi về. Sau đó, các giao dịch sẽ đƣợc phân tích thành các lệnh tƣơng ứng và chuyển sang cho “Bộ lập lịch”.

Tại “Bộ lập lịch”, sẽ lập lịch và xử lý đồng hành cho tối đa là 3 giao dịch. Nếu trong lúc xử lý, các giao dịch vẫn tiếp tục đƣợc gửi về, thì sẽ đƣợc xếp vào hàng đợi. Khi một giao dịch đƣợc xử lý xong, giao dịch trong hàng đợi sẽ đƣợc chèn ngay vào. “Bộ lập lịch” sẽ các lệnh đến “Bộ quản trị dữ liệu” để thao tác trực tiếp đến “Cơ sở dữ liệu” .

Trong thực tế các máy ATM hoạt động đa ngân hàng đƣợc làm việc theo mô hình sau:

Hình 3.11: Mô hình hoạt động của máy ATM

Hình trên, đƣờng kết nối giữa các máy ATM với “Bộ quản trị giao dịch”

các kết nối vật lý. Những kết nối giữa các “Bộ quản trị giao dịch” “Bộ lập lịch”

của các ngân hàng khác nhau có thể là các kết nối vật lý. Trên thực tế, “Bộ quản trị giao dịch”, “Bộ lập lịch”, “Bộ quản trị dữ liệu” “Dữ liệu ngân hàng” đều nằm tại server của một ngân hàng.

3.3.3. Phân tích hệ thống

Trên một máy ATM, các thao tác cơ bản đƣợc thực hiện: đăng nhập, xem tài

khoản, rút tiền, chuyển tiền, thoát khỏi hệ thống.

Khi ngƣời sử dụng thực hiện một thao tác, máy ATM sẽ gửi về hệ thống các

lệnh theo một định dạng đƣợc quy ƣớc trƣớc.

* Các định dạng của một giao dịch:

- Đăng nhập : ATM#: CheckIn(Card#,PIN)

- Thoát : ATM#: Logout(Acc#)

- Xem tài khoản : ATM#: Show(Acc#)

Các giao dịch

- Rút tiền : ATM#: Withdraw(Acc1#, Amount#)

- Chuyển tiền : ATM#: Transfer(Acc1#, Amount#, Acc2#)

Khi các giao dịch này đƣợc chuyển về “Bộ quản trị giao dịch” nó sẽ đƣợc phân tích thành một chuỗi các lệnh để gửi về “Bộ lập lịch”.

* Các lệnh trong giao dịch cần lưu ý:

Giao dịch “Xem tài khoản”: ATM#: Show(Acc#)

lockR(x) read(x) unlockR(x)

commit

Giao dịch “Rút tiền”: ATM#: Withdraw(Acc1#, Amount#)

lockW(x) read(x) write(x) unlockW(x)

commit

Giao dịch “Chuyển tiền”: ATM#: Transfer(Acc1#, Amount#, Acc2#)

lockW(x) read(x) write(x) lockW(y) read(y) write(y) unlockW(y) unlockW(x) commit * Lưu ý:

Trong chuỗi lệnh trên có hai kiểu khóa: lockR(x) và lockW(x), hai kiểu giải

phóng khóa tƣơng ứng: unlockR(x) và unlockW(x). Khóa lockR(x) là khóa đọc khi thao tác trên khoản mục x. Khóa lockW(x) là khóa ghi khi thao tác trên khoản mục

x. Các lệnh unlockR(x) và unlockW(x) tƣơng ứng với lệnh giải phóng khóa đọc và giải phóng khóa ghi.

Các giao dịch ở đây là các giao dịch thực hiện theo khóa 2 pha (2PL), vì thế

cách tổ chức các chuỗi lệnh trong một giao dịch cũng tuân thủ theo nguyên tắc của khóa 2 pha: trong pha tăng trƣởng: giao dịch yêu cầu khóa; trong pha thu hồi: chỉ có

thể giải phóng khóa mà không đƣợc yêu cầu khóa. Bằng cách này, “Bộ lập lịch”

thể lập lịch biểu khả tuần tự cho các giao dịch 2 pha.

3.3.4. Thiết kế cơ sở dữ liệu

Mỗi khách hàng (Customer) sẽ có 1 hoặc nhiều số tài khoản (Account). Mỗi số tài khoản sẽ xuất hiện trong 1 hoặc nhiều thẻ (Card) và mỗi ngân hàng sẽ có nhiều thẻ. Vì vậy, mỗi thẻ sẽ có số thẻ duy nhất, xác định số tài khoản và mã ngân hàng, số PIN. Tất cả các giao dịch của khách hàng (thẻ) trên máy ATM đƣợc lƣu trữ trong Transaction Log.

Cơ sở dữ liệu dành cho hệ thống ATM đa ngân hàng đƣợc thiết kế nhƣ sau:

Hình 3.12: Thiết kế cơ sở dữ liệu máy ATM

3.3.5. Đề xuất ý tưởng thuật toán điều khiển tương tranh

Ta thực hiện đồng thời một số lƣợng giao dịch giới hạn nhằm hạn chế hiện

tƣợng deadlock và tránh tình trạng lan truyền khi quá trình quay lui (rollback) xảy

giao dịch nhận đƣợc. Một cơ chế quét lần lƣợt qua 3 stack, lấy các lệnh trên đỉnh stack để thực hiện. Sau khi đƣợc thực hiện xong, lệnh sẽ đƣợc remove khỏi stack. Nếu trong quá trình thực thi lệnh, có xuất hiện tranh chấp về khóa ghi, thì giao dịch hiện hành sẽ đƣợc rollback và bị hủy. Nếu xuất hiện tranh chấp về khóa đọc, giao dịch hiện hành sẽ đƣợc chờ. Khi một stack trở nên rỗng, nó sẽ đƣợc nạp chuỗi lệnh của giao dịch tiếp theo trong hàng đợi. Quá trình này diễn ra liên tục, chỉ kết thúc khi không còn giao dịch nào trong hàng đợi, và tất cả các stack đều rỗng.

3.3.6. Nội dung thuật toán

Nạp chuỗi lệnh từ hàng đợi với cách sắp xếp FIFO. Mỗi Stack chứa một chuỗi lệnh của một giao dịch.

Sub ConcurrentProcessing(); For i=1 to 3 Queue.LoadTransaction() Stack(i) Next idSta ck=1; Do While idStack<=3 ch := Stack(idStack).GetCommand.Top(); If ch = lockR(x) Then

{Kiểm tra tình trạng khóa của khoản mục x}

If (LockStatus(x) = LockR) or (LockStatus = False) Then

ExecuteCommand ch; Stack(idStack).Remove ch;

End If {LockStatus}

End If {If lockR()}

If ch = lockW(x) Then

If (LockStatus(x) = False) Then ExecuteCommand ch;

Stack(idStack).Remove ch; Else

Rollback Transaction(idStack); End If

{LockStatus}

End If {If lockW()}

If ch <> lockR(x) and lockW(x) Then ExecuteCommand ch; Stack(idStack).Remove ch; End If

If Stack(idStack).IsEmpty = True Then

Queue.LoadTransaction() Stack(idStack);

End If

If Stack.AllOfStack.IsEmpty = True Then Exit Do

If idStack = 3 Then idStack = 1 Else idStack= idStack + 1 Loop

End Sub

3.3.7. Giao diện và các chức năng của chương trình

Đăng nhập:

Để đăng nhập, ngƣời sử dụng nhập các số thẻ và mã PIN hợp lệ tƣơng ứng nhƣ sau: Mã thẻ là: 1, 2 hoặc 3 – có số PIN: 111

Mã thẻ là: 4, 5 có số PIN: 222. Mã thẻ là: 6 có số PIN: 333

Hình 3.13: Giao diện đăng nhập máy ATM

Sau khi đăng nhập:

Hình 3.14: Giao diện sau khi đăng nhập máy ATM

Nhập số thẻ 1, 2 hoặc 3 Nhập số PIN tƣơng ứng 111, 222 hoặc 333 Nhấn nút Check-in để đăng nhập Nhấn nút Exit để thoát

Hình 3.15: Giao diện Bảng điều khiển máy ATM

Hình 3.16: Hiển thị quá trình xử lý

3.3.8. Quy trình kiểm thử chương trình

a. Kiểm tra giao dịch đọc dữ liệu của tài khoản:

Các giao dịch:

T-ATM0= lockR(Acc=1), read(Acc=1), unlockR(Acc=1), commit(Acc=1)

Kết quả từ bộ lập lịch:

R0(Acc1)

b. Kiểm tra hai giao dịch cùng đọc dữ liệu của một tài khoản:

Các giao dịch:

T-ATM0= lockR(Acc=1), read(Acc=1), unlockR(Acc=1), commit(Acc=1) T-ATM1= lockR(Acc=1), read(Acc=1), unlockR(Acc=1), commit(Acc=1)

Kết quả từ bộ lập lịch:

R0(Acc1) R1(Acc1)

c. Kiểm tra giao dịch rút tiền và đọc dữ liệu trên một tài khoản:

Các giao dịch:

T-ATM0= lockW(Acc=1), read(Acc=1), write(Acc=1), unlockW(Acc=1), commit

T-ATM1= lockR(Acc=1), read(Acc=1), unlockR(Acc=1), commit(Acc=1)

Kết quả từ bộ lập lịch:

R0(Acc1) W0(Acc1) R1(Acc1)

d. Kiểm tra hai giao dịch rút tiền trên một tài khoản:

Các giao dịch:

T-ATM0= lockW(Acc=1), read(Acc=1), write(Acc=1), unlockW(Acc=1), commit

T-ATM1= lockW(Acc=1), read(Acc=1), write(Acc=1), unlockW(Acc=1), commit

Kết quả từ bộ lập lịch:

e. Kiểm tra hai giao dịch chuyển tiền và rút tiền trên một tài khoản:

Các giao dịch:

T-ATM0= lockW(Acc=1), read(Acc=1), write(Acc=1), lockW(Acc=2),

read(Acc=2), write(Acc=2), unlockW(Acc=2), unlockW(Acc=1),

commit

T-ATM1= lockW(Acc=1), read(Acc=1), write(Acc=1), unlockW(Acc=1), commit

Kết quả từ bộ lập lịch:

R0(Acc1) W0(Acc1) R0(Acc2) W0(Acc2) R1(Acc1) W1(Acc1)

f. Kiểm tra hai giao dịch chuyển tiền của hai tài khoản cho nhau:

Các giao dịch:

T-ATM0= lockW(Acc=1), read(Acc=1), write(Acc=1), lockW(Acc=2), read(Acc=2), write(Acc=2), unlockW(Acc=2), unlockW(Acc=1), commit T-ATM1= lockW(Acc=2), read(Acc=2), write(Acc=2),

lockW(Acc=1), read(Acc=1), write(Acc=1), unlockW(Acc=1), unlockW(Acc=2), commit

Kết quả từ bộ lập lịch:

R0(Acc1) R1(Acc2) W0(Acc1) W1(Acc2) A0(Acc1) R1(Acc1) W1(Acc1)

g. Kiểm tra ba giao dịch chuyển tiền của ba tài khoản cho lẫn nhau:

Các giao dịch:

T-ATM0= lockW(Acc=1), read(Acc=1), write(Acc=1), lockW(Acc=2), read(Acc=2), write(Acc=2), unlockW(Acc=2), unlockW(Acc=1), commit T-ATM1= lockW(Acc=2), read(Acc=2), write(Acc=2),

lockW(Acc=3), read(Acc=3), write(Acc=3), unlockW(Acc=3), unlockW(Acc=2), commit

T-ATM2= lockW(Acc=3), read(Acc=3), write(Acc=3), lockW(Acc=1), read(Acc=1), write(Acc=1), unlockW(Acc=1), unlockW(Acc=3), commit

Kết quả từ bộ lập lịch:

R0(Acc1) R1(Acc2) R2(Acc3) W0(Acc1) W1(Acc2) W2(Acc3) A0(Acc1) A1(Acc2) R2(Acc1) W2(Acc1)

h. Kiểm tra 5 giao dịch thực hiện đồng thời:

Các giao dịch:

T-ATM0= lockW(Acc=1), read(Acc=1), write(Acc=1), lockW(Acc=2), read(Acc=2), write(Acc=2), unlockW(Acc=2), unlockW(Acc=1), commit T-ATM1= lockW(Acc=2), read(Acc=2), write(Acc=2),

lockW(Acc=3), read(Acc=3), write(Acc=3), unlockW(Acc=3), unlockW(Acc=2), commit T-ATM2= lockW(Acc=3), read(Acc=3), write(Acc=3),

lockW(Acc=1), read(Acc=1), write(Acc=1), unlockW(Acc=1), unlockW(Acc=3), commit T-ATM3= lockW(Acc=1), read(Acc=1), write(Acc=1), unlockW(Acc=1), commit

T-ATM4= lockW(Acc=2), read(Acc=2), write(Acc=2), unlockW(Acc=2), commit

Kết quả từ bộ lập lịch:

R1(Acc2) R2(Acc3) R0(Acc1) W1(Acc2) W2(Acc3) W0(Acc1) A1(Acc2) A2(Acc3) R0(Acc2) W0(Acc2) R4(Acc2) R3(Acc1) W4(Acc2) W3(Acc1)

KẾT LUẬN

1. Đánh giá kết quả

1.1.Kết quả đạt được

Qua thời gian thực hiện luận văn với đề tài “Tìm hiểu một số thuật toán

điều khiển tương tranh trong cơ sở dữ liệu phân tán” tôi đã tìm hiểu các kiến

thức về cơ sở dữ liệu phân tán, quản trị các giao dịch phân tán, các thuật toán điều khiển tƣơng tranh và vai trò của chúng, đồng thời đánh giá sơ bộ các thuật toán.

1.2.Nhận xét

a.Ưu điểm:

Cơ sở lý thuyết đƣợc cập nhật đầy đủ, diễn giải rõ ràng, phân tích cụ thể trƣớc khi tiến hành việc nghiên cứu sâu về kỹ thuật ứng dụng.

Nội dung tiềm hiểu là vấn đề cấp thiết hiện nay và có nhiều ứng dụng trên thực tế.

Xây dựng chƣơng trình mô phỏng hoạt động của hệ thống ATM đa ngân hàng.

b.Nhược điểm:

Chƣơng trình mô phỏng chƣa mang lại ứng dụng thực tiễn vì điều kiện cơ sở vật chất, nó chỉ giúp việc tìm hiểu các kỹ thuật điều khiển tƣơng tranh tốt hơn.

Chƣơng trình còn hạn chế về số lƣợng giao dịch và chỉ mới thực hiện theo kỹ thuật sử dụng khóa 2 pha.

2. Phạm vi ứng dụng

Luận văn đã mô tả đầy đủ, chi tiết các nội dung về vấn đề điều khiển tƣơng tranh trong môi trƣờng phân tán. Nó phản ánh trực quan các vấn đề công việc trong hệ quản trị cơ sở dữ liệu phân tán làm cơ sở cho việc nghiên cứu chuyên sâu hình thành các thuật toán mới cho kỹ thuật điều khiển các giao dịch đồng thời.

Ngoài ra còn có thể ứng dụng vào công tác giảng dạy.

3. Hƣớng phát triển

Tôi định hƣớng phát triển đề tài trong thời gian đến nhƣ sau:

- Tìm hiểu thêm một số thuật toán mới về điều khiển tƣơng tranh, so sánh

cao nhất. Ngoài ra, xem xét việc kết hợp các thuật toán với nhau để tận dụng các ƣu thế ở từng thuật toán.

- Mở rộng thêm khả năng của chƣơng trình nhƣ tăng số lƣợng các giao dịch đồng thời, xử lý các vấn đề bế tắc và tăng khả năng khôi phục hệ thống khi gặp sự cố,…

TÀI LIỆU THAM KHẢO

Tiếng Việt

1. Nguyễn Bá Tƣờng (2005), Nhập môn cơ sở dữ liệu phân tán, Nhà xuất bản

Khoa học Kỹ thuật, Hà nội.

Tiếng Anh

2. Arun Kumar Yadav & Ajay Agarwal (2010), “An Approach for Concurrency

Control in Distributed Database System”, International Journal of Computer

Science & Communication ,Vol. 1, No. 1.

3. Al-Jumaha N.B, Hassaneinb H.S, El-Sharkawia M (2000), “Implementation

and modeling of two-phase locking concurrency control - a performance

study”, Information and Software Technology 42, pp 257–273.

4. Shashi Bhushan, Patel R.B, Mayank Dave (2007), “A Secure Time-Stamp

Based Concurrency Control Protocol For Distributed Databases”, Journal of

Computer Science 3.

5. Tamer Özsu & Patrick Valduriez (2011), Principles of Distributed Database Systems, Springer Science Business Media.

6. Ulman Jeffrey D. (1999), Nguyên lý các hệ cơ sở dữ liệu và cơ sở tri thức, Biên dịch Trần Đức Quang tập 1 và 2, Nhà xuất bản Thống kê, Hà nội.

Một phần của tài liệu tìm hiểu một số thuật toán điều khiển tương tranh trong cơ sở dữ liệu phân tán (Trang 62 - 77)