Chuẩn bị cho kỳ thi 730 cơ bản về DB2 9, Phần 6: Nhất quán dữ liệu
lượt xem 13
download
Roger Sanders, Quản lý cao cấp, EMC Tóm tắt: Bài viết này giới thiệu khái niệm cơ bản của tính nhất quán cơ sở dữ liệu và các cơ chế khác nhau trong sử dụng của DB2 để cho phép làm việc trong cả môi trường dữ liệu một người dùng và nhiều người dùng. Đây là bài viết thứ 6 trong bảy bài viết hỗ trợ bạn bắt đầu làm việc với DB2 9 trên hệ điều hành Linux, UNIX, và Windows™ chuẩn bị cho bài thi lấy chứng chỉ 730. Trước khi bạn bắt đầu Về loạt bài...
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Chuẩn bị cho kỳ thi 730 cơ bản về DB2 9, Phần 6: Nhất quán dữ liệu
- Chuẩn bị cho kỳ thi 730 cơ bản về DB2 9, Phần 6: Nhất quán dữ liệu Roger Sanders, Quản lý cao cấp, EMC Tóm tắt: Bài viết này giới thiệu khái niệm cơ bản của tính nhất quán cơ sở dữ liệu và các cơ chế khác nhau trong sử dụng của DB2 để cho phép làm việc trong cả môi trường dữ liệu một người dùng và nhiều người dùng. Đây là bài viết thứ 6 trong bảy bài viết hỗ trợ bạn bắt đầu làm việc với DB2 9 trên hệ điều hành Linux, UNIX, và Windows™ chuẩn bị cho bài thi lấy chứng chỉ 730. Trước khi bạn bắt đầu Về loạt bài viết này Suy nghĩ về việc có được/đạt được chứng chỉ DB2 (Bài thi số 730)? Để đạt được điều này bạn tiếp cận một cách chính xác theo các hướng dẫn. Đây là loạt bài gồm bảy bài viết chuẩn bị cho cuộc thi lấy chứng chỉ DB2 loạt bài viết này giới thiệu mọi thứ cơ bản cần thiết -- Các chủ đề này bạn cần phải hiểu rõ trước khi bạn làm bài kiểm tra đầu tiên. Thậm chí kể cả khi bạn chưa có kế hoạch để có được chứng chỉ này, thì tập hợp các bài viết này vẫn là nơi tốt để bạn tìm hiểu xem cái gì mới khi sử dụng DB2 9. Về bài viết này Bài viết này sẽ chỉ dẫn cho bạn khái niệm cơ bản nhất của tính nhất quán dữ liệu và các cơ chế khác nhau được sử dụng bởi DB2 9 trong Linux, UNIX và Windows để thực thi được trong cả hai môi trường cơ sở dữ liệu một người và nhiều người sử dụng. Đây là bài viết thứ sáu trong loạt bảy bài viết bạn có thể sử dụng để chuẩn bị cho các bài thi Cơ bản về DB2 9 (DB2 9 Fundamental). Điểm trọng yếu của b ài viết
- này là giới thiệu các mục tiêu chính, đó là "tính nhất quán của dữ liệu". Bạn có thể xem các mục tiêu này tại: http://www-03.ibm.com/certify/tests/obj730.shtml. Các đối tượng Sau khi hoàn thành bài học này, bạn có thể: Xác định các nhân tố ảnh hưởng đến việc thực hiện khóa Danh sách các đối tượng được điều khiển Xác định các đặc trưng của các khóa DB2 Xác định mức độc lập được sử dụng để đưa ra trạng tái Các điều kiện tiên quyết Để hiểu được một số vấn đề quan trọng của bài viết này, bạn nên tham gia vào các phần sau: Đối tượng: Là bất kỳ cái gì trong cơ sở dữ liệu mà có thể được tạo ra hay thực thi với SQL (Ví dụ: các bảng, các chỉ mục, các gói,...). Bảng: Là một cấu trúc logic được sử dụng để hiển thị dữ liệu như là một tập hợp của các hàng không định thứ tự với một số cột xác định. Mỗi một cột chứa một tập giá trị, trong đó mỗi giá trị là cùng kiểu với nhau (hoặc
- kiểu con của kiểu dữ liệu cột); định nghĩa cột cho phép xác định cấ u trúc của bảng và các hàng của bảng chứa dữ liệu chính xác của bảng đó. Bản ghi: Thể hiện dữ liệu lưu trữ theo từng hàng trong bảng. Trường: Thể hiện của cột được lưu trong bảng. Giá trị: Xác định thành phần dữ liệu cái được tìm thấy tại mỗi hàng và cột trong bảng cơ sở dữ liệu. Ngôn ngữ truy vấn cấu trúc (SQL): Là ngôn ngữ chuẩn được sử dụng để định nghĩa các đối tượng và thực thi dữ liệu trong cơ sở dữ liệu quan hệ. Để có nhiều thông tin hơn về SQL hãy xem bài viết thứ tư trong loạt bài viết này. Bộ tối ưu hóa DB2: Là thành phần của bộ tiền biên dịch SQL (precompiler) là cái được chọn để truy cập cho câu lệnh SQL Data Manipulation Language (DML)(Ngôn ngữ xử lý dữ liệu) bằng việc mô hình hóa giá trị thực thi của một số truy cập riêng biệt và được chọn như là một cách với số chi phí cần thiết nhỏ nhất. Các yêu cầu hệ thống Bạn không cần thiết phải có bản sao chép của DB2 9 để ho àn thành bài học này. Tuy nhiên, bạn sẽ nhận được nhiều kết quả của bài học này hơn nếu bạn tải phiên bản dùng thử của IBM DB2 9 để làm việc trong bài học này.
- Các phiên làm việc Tìm hiểu tính nhất quán dữ liệu Tính nhất quán dữ liệu là gì? Cách để đưa được câu trả lời tốt nhất cho câu hỏi này đó làm dựa vào ví dụ. Công ty bạn làm việc là một chuỗi các nhà hàng và công việc bạn cần làm là xây dựng một cơ sở dữ liệu để có thể lưu trữ được dữ liệu cho từng nhà hàng này. Để phiên làm việc giải quyết vấn đề này đơn giản, cơ sở dữ liệu của bạn chứa bảng thống kê cho từng nhà hàng trong chuỗi các nhà hàng. Mỗi khi hàng hóa được cung cấp hoặc được sử dụng bởi từng nhà hàng riêng biệt thì bảng thống kê tương ứng của từng nhà hàng sẽ được sửa chữa tương ứng phù hợp với thay đổi đó. Bây giờ, khi có một số chai nước sốt cà chua được di chuyển từ một nhà hàng này tới một nhà hàng khác. Khi đó, bảng thống kê báo cáo sẽ bị thay đổi tương ứng, số chai nước sốt cà chua của nhà hàng ban đầu cần phải giảm bớt đi và số chai nước sốt cà chua của nhà hàng nhận sẽ được tăng lên tương ứng. Nếu bạn chỉ giảm số chai nước sốt cà chua của nhà hàng ban đầu mà lại không tăng được số chai nước sốt cà chua của nhà hàng nhận trong bảng thống kê, dữ liệu sẽ trở lên mâu thuẫn - và vì thế tổng số chai nước sốt cà chua của chuỗi nhà hàng là không được chính xác. Dữ liệu trong cơ sở dữ liệu có thể trở lên mâu thuẫn nếu người dùng quên thực hiện các thao tác thay đổi cần thiết (như trong ví dụ trước), nếu hệ thống bị phá vỡ trong khi người dùng đang thực hiện các thay đổi hoặc khi ứng dụng cơ sở dữ liệu vì một lý do nào đó bị dừng đột ngột. Sự mâu thuẫn cũng có thể xảy ra khi các người sử dụng truy cập đến cùng một bảng cơ sở dữ liệu tại cùng một thời gian. Để tránh việc xảy ra mâu thuẫn dữ liệu, đặc biệt phải thận trọng khi sử dụng trong môi trường nhiều người dùng, DB2 được thiết kế hỗ trợ để tránh sự mâu thuẫn trong dữ liệu:
- Các phiên làm việc (transactions) Các mức cô lập (iosolation levels) Các khóa (locks) Các phiên làm việc và các khung phiên làm việc Mỗi phiên làm việc (được biết như đơn vị công việc) là một dãy gồm một hoặc nhiều các xử lý SQL được nhóm lại với nhau như một đơn vị riêng lẻ, phiên làm việc thường được sử dụng để xử lý ứng dụng. Sự bắt đầu và kết thúc của phiên làm việc được định nghĩa là tập hợp các điểm xác định của cơ sở dữ liệu; sẽ có hai trường hợp hoặc là các xử lý SQL thực thi cho các cách phiên làm việc được áp dụng cho cơ sở dữ liệu (được xử lý - committed) hoặc là các xử lý của SQL không được thực hiện đầy đủ và bỏ qua (quay trở lại - rolled back). Với việc nhúng các ứng dụng SQL và các tập mã lệnh (script) từ Command Center (Trung tâm câu lệnh) hoặc trên Script Center (Trung tâm tập lệnh) hoặc Command Line Processor (Xử lý dòng lệnh) các cách phiên làm việc được khởi tạo một cách tự động cho lần đầu khi các câu lệnh SQL được thực thi, hay là sau khi kết nối đến cơ sở dữ liệu thành công thì các phiên làm việc lúc này mới bị ngắt. Cho một lần khởi tạo, phiên làm việc phải được ngắt bởi người dùng hoặc bởi ứng dụng đã khởi động phiên làm việc đó trừ khi bộ xử lý biết trao quyền tự động (trong trường hợp này mỗi một câu lệnh SQL cho phép xử lý được xem như một phiên làm việc đơn lẻ khi đó xử lý được nhanh chóng thực hiện). Trong hầu hết các trường hợp, các phiên làm việc được thực thi hoặc bằng câu lệnh COMMIT hoặc bằng câu lệnh ROLLBACK. Khi câu lệnh COMMIT đ ược
- thực thi, tất cả các thay đổi tới cơ sở dữ liệu khi các phiên làm việc khởi tạo được cố định -- có nghĩa là các thay đổi sẽ được lưu trữ tới đĩa. Khi câu lệnh ROLLBACK được thực thi tất cả các thay đổi được tạo ra tới cơ sở dữ liệu khi phiên làm việc được khởi tạo được quay lại và cơ sở dữ liệu được trả lại ở trạng thái trước khi phiên làm việc được thực hiện. Trong một trường hợp khác dữ liệu được đảm bảo trả lại trạng thái phù hợp khi hoàn thành phiên làm việc. Điều quan trọng là trong khi phiên làm việc cung cấp cơ sở dữ liệu đảm bảo thì sự thay đổi dữ liệu chỉ bị ngắt sau khi phiên làm việc được thực hiện thành công, điều đó dẫn tới người dùng hay các ứng dụng cho phép đảm bảo rằng một dãy các xử lý SQL được thực hiện trong mỗi phiên làm việc luôn luôn đưa ra kết quả trong cơ sở dữ liệu xác định. Hiệu quả của các xử lý COMMIT và ROLLBACK Chú ý rằng, các phiên làm việc thường bị ngắt khi thực thi câu lệnh SQL dạng COMMIT hay ROLLBACK. Để hiểu rõ các câu lệnh này làm việc như thế nào, bạn tham khảo tới ví dụ trong phần này. Nếu theo các câu lệnh SQL được hiển thị phần sau: Ví dụ 1. Dòng công việc đơn giản gồm ba phiên làm việc
- CONNECT TO MY_DB CREATE TABLE DEPARTMENT (DEPT_ID INTEGER NOT NULL, DEPT_NAME VARCHAR(20)) INSERT INTO DEPARTMENT VALUES(100, 'PAYROLL') INSERT INTO DEPARTMENT VALUES(200, 'ACCOUNTING') COMMIT INSERT INTO DEPARTMENT VALUES(300, 'SALES') ROLLBACK INSERT INTO DEPARTMENT VALUES(500, 'MARKETING') COMMIT Kết quả, bảng DEPARTMENT được tạo ra có dạng như sau: DEPT_ID (Mã DEPT_NAME (Tên phòng) phòng)
- 100 PAYROLL 200 ACCOUNTING 500 MARKETING Kết quả như vậy là bởi vì khi câu lệnh COMMIT đầu tiên được thực thi, nó tạo ra bảng DEPARTMENT và chèn hai bản ghi vào bảng DEPARTMENT vĩnh viễn. Một mặt khác, khi câu lệnh ROLLBACK đầu tiên được thực hiện thì bản ghi thứ ba được chèn thêm vào bảng DEPARTMENT và đồng thời bảng được trả lại ở trạng thái trước khi câu lệnh chèn thêm phần tử này được thực hiện. Cuối cùng, khi câu lệnh COMMIT thứ hai được thực hiện thì thực hiện chèn thêm bản ghi thứ tư xác định vào bảng DEPARMENT và cơ sở dữ liệu tiếp tục trả lại trạng thái phù hợp. Khi bạn nhìn thấy ví dụ này, lệnh xử lý xác nhận hoặc quay trở lại chỉ thực hiện thay đổi phù hợp để tạo ra phiên làm việc cái mà câu lệnh commit hay câu lệnh rollback thực hiện xử lý. Khi mà dữ liệu bị thay đổi không được xem xét thì các người sử dụng và các ứng dụng khác luôn luôn không thể nhìn thấy chúng (tất nhiên có một ngoại lệ cái mà sẽ được trình bày ở phần sau), và chúng có thể quay lại kết quả đơn giản trước khi thực hiện xử lý quay trở lại. Tuy nhiên khi một dữ liệu thay đổi được xem xét chúng trở lên có tác dụng với các người dùng và các ứng dụng khác và có thể không mất thời gian di chuyển bởi xử lý quay trở lại.
- Tác dụng của các phiên làm việc không thực hiện thành công Chúng tôi đã trình bày điều gì xảy ra khi một phiên làm việc bị ngắt bởi câu lệnh COMMIT hoặc câu lệnh ROLLBACK. Nhưng vấn đề gì xảy ra nếu hệ thống xảy ra lỗi trước khi phiên làm việc có thể hoàn thành? Trong trường hợp này, Hệ quản trị cơ sở dữ liệu DB2 sẽ quay lại tất cả các sự thay đổi không được xem xét để có thể lưu giữ cơ sở dữ liệu phù hợp với giả định là có tồn tại ngay từ khi phiên làm việc được khởi tạo. Hình 1 so sánh tác dụng của phiên làm việc thành công với các phiên làm việc bị lỗi trước khi nó được ngắt thành công Hình 1. So sánh sự giữa phiên làm việc thành công và không thành công
- Các mức độ độc lập và thống nhất Điều gì không thể xảy ra khi nhiều người dùng cùng truy cập đến một cơ sở dữ liệu Trong các môi trường một người dùng, mỗi một phiên làm việc chạy liên tục và không xảy ra đụng độ với các phiên làm việc khác. Tuy nhiên, trong môi trường nhiều người sử dụng các phiên làm việc có thể (và thường xuyên) xảy ra tình trạng cùng chạy đồng thời tại một thời điểm. Trong trường hợp này, mỗi một phiên làm việc chạy tuần tự có tiềm tàng khả năng cản trở với các phiên làm việc chạy ở chế độ chen vào hoặc song song, điều này có nghĩa là các kết quả của chạy song song đồng thời nhận được so với các kết quả chạy tuần tự. Khi các phiên làm việc song song được sử dụng trong các môi trường nhiều người dùng, có bốn trường hợp hay các điều ngoại lệ có thể xảy ra: Cập nhật thiếu (Lost update): Điều này xảy ra khi hai phiên làm việc cùng đọc và sau đó cập nhật cho cùng một dữ liệu và khi đó có một trong hai phiên làm việc cập nhật bị mất. Ví dụ: Phiên làm việc 1 và Phiên làm việc 2 cùng đọc một dòng của dữ liệu và cả hai đều thực hiện tính toán dựa trên dữ liệu đã đọc được. Nếu Phiên làm việc 1 thực hiện cập nhật giá trị mới cho hàng và Phiên làm việc 2 cũng thực hiện tương tự thì thao tác xử lý cập nhật của Phiên làm việc 1 là bị mất. Bởi vì vậy nên DB2 được thiết kế không cho phép xảy ra trường hợp đặc biệt này. Đọc dư thừa (Dirty read): Điều này xảy ra khi mà phiên làm việc thực hiện đọc dữ liệu không được xem xét. Ví dụ: Phiên làm việc 1 thay đổi hàng của dữ liệu và Phiên làm việc 2 đọc đến dữ liệu đã bị thay đổi trước khi Phiên làm việc 1 thực hiện được thao tác thay đổi đó. Nếu Phiên làm
- việc 1 thực hiện quay lại làm thay đổi này, Phiên làm việc 2 sẽ đọc đến dữ liệu tính toán mà thực tế không tồn tại. Đọc không lặp lại (Nonrepeatable read): Điều này xảy ra khi phiên làm việc đọc đến một hàng hai lần nhưng dữ liệu thu được lại là khác nhau cho từng lần đọc. Ví dụ: Phiên làm việc 1 đọc một hàng dữ liệu và Phiên làm việc 2 thực hiện thay đổi hoặc xóa ngay chính hàng đó. Vì vậy khi Phiên làm việc 1 thực hiện đọc lại chính hàng đó nó sẽ thu được các giá trị khác so với trước (nếu hàng đã được cập nhật) hoặc cảnh báo hàng đó không tồn tại (nếu hàng đã bị xóa). Không xảy ra (Phantom): Điều này xảy ra khi một hàng dữ liệu phù hợp với điều kiện tìm kiếm không được khởi tạo thực hiện lần thứ nhất nhưng lại được thực hiện trong lần xử lý sau. Ví dụ: Phiên làm việc 1 đọc một tập các hàng phù hợp với một số điều kiện tìm kiếm và Phiên làm việc 2 chèn thêm hàng mới cũng phù hợp với điều kiện tìm kiếm trong Phiên làm việc 1. Nếu Phiên làm việc 1 thực hiện lại thao tác xử lý thì kết quả thu được một tập các hàng là có sự khác biệt so với các hàng đã thực hiện lần trước. Để duy trì tính ổn định của cơ sở dữ liệu và tính toàn vẹn của dữ liệu thì khi cho phép nhiều ứng dụng cùng truy cập đến cùng một dữ liệu tại cùng một thời điểm thì phải đảm bảo tính thống nhất. Một trong các cách mà DB2 cho phép thống nhất cơ sở dữ liệu đó là sử dụng các mức độc lập, cái mà cho phép xác định dữ liệu được sử dụng như thế nào trong một phiên làm việc hoặc tính độc lập từ các phiên làm việc khác trong khi phiên làm việc đầu tiên thực hiện. DB2 sử dụng các mức độc lập sau cho phép thống nhất sử dụng dữ liệu: Đọc lặp lại (Repeatable read) Đọc ổn định (Read stability)
- Tham khảo ổn định (Cursor stability) Đọc không được xem xét (Uncommitted read) Mức độ độc lập đọc lặp lại cung cấp tất cả các trường hợp đặc biệt để làm giảm lượng lớn của sự đồng nhất (một số các phiên làm việc có thể được truy cập tới cùng một nguồn cùng lúc). Mức đọc độc lập không xem xét cung cấp mức lớn nhất của sự thống nhất nhưng cho phép cả ba trường hợp đặc biệt để xảy ra. Mức độc lập của đọc lặp lại Mức độc lập của đọc lặp lại là mức độc lập giới hạn tốt nhất. Khi nó được sử dụng, hiệu quả của một phiên làm việc là hoàn toàn độc lập từ tác dụng của phiên làm việc đồng nhất khác: đọc dư thừa, đọc không lặp lại, và không xảy ra. Với việc đọc lặp lại mọi hàng có thể được tham chiếu trong manner bởi phiên làm việc thuộc quyền sở hữu và các dòng này là bị khóa trong suốt quá trình thực hiện phiên làm việc. Với kết quả này, nếu cùng một câu lệnh SELECT được sử dụng hai hoặc nhiều lần hơn trong cùng một phiên làm việc, tập kết quả thu được luôn luôn là giống nhau. Hơn thế, phiên làm việc chạy ở mức độc lập này có thể khôi phục cùng một tập các hàng nhiều lần và thực hiện xử lý các thao tác đó cho đến khi bị ngắt bởi xử lý xác nhận thực hiện lệnh hay quay trở lại. Tuy nhi ên, một phiên làm việc khác được ngăn chặn từ việc thực hiện chèn, cập nhập hoặc xóa thì điều này có thể ảnh hưởng đến bất kỳ hàng nào đã được truy cập thành công bởi phiên làm việc khi mà phiên làm việc dư thừa ra. Để bảo đảm cho hành động này, mỗi một hàng được tham chiếu đến bởi một phiên làm việc xác định được khóa lại - không cho các hàng này được khôi phục hoặc sửa chữa tiếp. Vì thế nếu phiên
- làm việc quét qua 1,000 dòng để khôi phục 10 dòng thì khóa được yêu cầu và đánh dấu tất cả 1,000 dòng đó cho đến khi 10 dòng được khôi phục. Làm thế nào mức độc lập đọc lặp lại làm việc được trong tình huống thế giới thực? Vì mục đích này bạn có thể sử dụng cơ sở dữ liệu DB2 để lưu giữ các bản ghi của khách sạn bao gồm thông tin đặt chỗ và thông tin các phòng và bạn có ứng dụng dựa trên nền Web để cho phép các cá nhân riêng lẻ có thể đặt phòng cho những lần đến đầu tiên một cách đơn giản. Nếu ứng dụng dành riêng của bạn chạy dưới mức độc lập đọc lặp lại, khách hàng quét cơ sở dữ liệu để hiển thị các phòng chưa thuê để họ đăng ký ngày thuê và đồng thời cung cấp cho bạn (người quản lý) để thay đổi trạng thái của phòng để cập nhật vào cơ sở dữ liệu khi mà thực hiện yêu cầu xử lý của khách hàng. Tương tự, những khách hàng khác không thể thực hiện hay hủy bỏ giao dịch nếu như một phòng nào đó đã được đăng ký thuê rồi. Tuy nhiên bạn có thể cho phép thay đổi giá phòng cho bất kỳ phòng nào khi mà khách hàng chưa đăng ký thuê phòng. Điều đó có nghĩa là, các khách hàng khác có thể thực hiện hay hủy bỏ việc đặt phòng cho bất kỳ phòng nào trong khi phòng đó chưa được đăng ký thuê. Đặc trưng này được mô tả ở trong hình 2.
- Hình 2. Ví dụ của mức độc lập đọc lặp lại Mức độc lập của đọc ổn định Mức độc lập của đọc ổn định không bị giới hạn như mức đọc lặp lại; vì thế nên không thể có sự độc lập hoàn toàn từ một phiên làm việc tới các phiên làm việc khác. Mức độc lập đọc ổn định được giả định cung cấp khả năng đọc các bản ghi dư thừa và không lặp lại. Khi mức độc lập này được sử dụng chỉ các dòng được khôi phục chính xác hoặc được sửa chữa bởi chính phiên làm việc đó được khóa lại. Vì vậy, nếu phiên làm việc quét 1,000 dòng để khôi phục 10 dòng, khóa chỉ yêu cầu và nắm giữ 10 dòng đã được khôi phục đó chứ không phải khóa hết 1,000 dòng đã quét. Với kết quả này, nếu cùng câu lệnh SELECT được thực hiện hai hay nhiều lần trong cùng một phiên làm việc thì tập kết quả có thể không giống nhau cho mỗi lần thực hiện.
- Khi với mức độc lập đọc lặp lại, phiên làm việc được chạy dưới mức độc lập đọc ổn định có thể khôi phục tập các hàng và thực thi bất kỳ thao tác xử lý nào trong số đó cho đến khi bị ngắt. Các phiên làm việc được ngăn lại từ thực thi cập nhật hay xử lý xóa có thể bị ảnh hưởng bởi tập các hàng được khôi phục từ chính phiên làm việc cũng như do phiên làm việc tồn tại, tuy nhiên các phiên làm việc khác có thể thực thi việc chèn vào các thao tác xử lý. Nếu một dòng được chèn vào phù hợp với điều kiện lựa chọn của truy vấn bởi chính phiên làm việc xử lý đó thì các dòng này được xuất hiện như các dòng ảo trong tập dữ liệu của chuỗi kết quả. Sự thay đổi này làm cho các dòng khác của các phiên làm việc khác không thể được xử lý cho đến khi dòng đang xử lý được thực hiện. Mức độc lập đọc ổn định thay đổi cách đặt phòng khác sạn của bạn như thế nào? Khi khách hàng quét cơ sở dữ liệu để xem danh sách các phòng còn trống để đặt phòng bạn sẽ có thể thay đổi trạng thái cho bất kỳ phòng nào không có trong danh sách của khách hàng đó. Ngược lại, các khách hàng khác sẽ không thể thực hiện hoặc hủy bỏ việc đặt chỗ của khách hàng khác đã đặt từ đầu nếu cùng một truy vấn giống vậy đã được chạy lần nữa. Nếu khách hàng đầu tiên thực hiện truy vấn để tìm phòng trống để đặt phòng trong cùng một ngày thì danh sách danh sách có thể chứa phòng đặt mới và/hoặc phòng đó không được đặt cho lần đầu tiên đăng ký. Đặc tính này được mô tả trong Hình 3.
- Hình 3. Ví dụ của mức độc lập đọc ổn định Mức độc lập của tham khảo ổn định (Cursor) Mức độ độc lập thao khảo ổn định là rất thú vị trong cách độc lập tác dụng của một phiên làm việc tới các tác dụng của một phiên làm việc khác. Nó cung cấp khả năng đọc các bản ghi thừa tuy nhiên trường hợp đọc các bản ghi không có khả năng lặp lại và bản ghi ảo vẫn có thể có khả năng xảy ra. Điều đó bởi vì trong hầu hết các trường hợp mức độ độc lập tham khảo ổn định chỉ khóa hàng đang được tham chiếu bởi con trỏ soạn thảo đó là hàng được mô tả và mở bởi chính phiên làm việc đang xử lý. Khi một phiên làm việc sử dụng mức độc lập tham khảo ổn định để khôi phục hàng từ bảng thông qua con trỏ khi đó không thể có phiên làm việc nào có thể cập nhật hoặc xóa dòng mà con trỏ đang được đặt trong đó. Tuy nhiên, các phiên làm
- việc khác có thể thêm hàng mới vào bảng cũng như cũng có thể cập nhật hoặc xóa các dòng ở vị trí bên phía kia của các dòng đã được khóa - các dòng đã bị khóa không thể truy cập đến bằng cách sử dụng chỉ mục. Mỗi khi được yêu cầu, dòng khóa sẽ tồn tại trong quá trình cho đến khi con trở được thay thế hoặc cho đến phiên làm việc bị ngắt. (Nếu con trỏ được thay thế vị trí, khóa được cầm trên hàng trước được giải phóng và khóa mới được yêu cầu cho hàng mà con trỏ đang đặt tại vị trí đó). Hơn thế, nếu phiên làm việc đang làm việc thực hiện sửa bất kỳ hàng nào được khôi phục thì các phiên làm việc khác cũng không được phép cập nhật hoặc xóa hàng đó cho đến khi chính phiên làm việc đó ngắt thậm chí con trỏ soạn thảo có thể cũng không được đặt trên chính dòng được sửa chữa. Như là các mức độc lập đọc lặp lại và các mức độc lập đọc ổn định, các phiên làm việc sử dụng mức độc lập tham khảo ổn định (được cho là mặc định sử dụng) sẽ không nhìn thấy sự thay đổi của các hàng khác bởi các phiên làm việc khác cho đến khi những thay đổi này được thực hiện hoàn thành. Nếu chương trình đặt phòng khách sạn đang chạy dưới mức độ độc lập tham khảo ổn định thì thao tác xử lý nào được thực hiện. Khi khách hàng duyệt qua cơ sở dữ liệu để có được danh sách các phòng trống để đặt phòng và sau đó hiển thị thông tin về mỗi phòng trong danh sách đảm bảo mỗi phòng được đăng ký tại mỗi thời điểm khác nhau khi đó bạn có thể thay đổi thông tin cho bất kỳ phòng nào trong khách sạn ngoại trừ phòng mà khách hàng đang xem tại vị trí hiện tại (để xác định ngày đặt phòng). Ngược lại, các khách hàng khác sẽ có thể tạo ra hoặc hủy bỏ việc đặt phòng cho bất kỳ phòng nào trong khách sạn ngoại trừ phòng mà khách hàng đang tìm kiếm (để xác định ngày đặt). Tuy nhiên, không phải bạn hoặc khách hàng khác sẽ có thể thực hiện bất kỳ cái gì với phòng mà khách hàng đầu tiên đang tìm kiếm. Khi khách hàng đầu tiên hiển thị thông tin về phòng khác trong danh sách, bạn và các khách hàng khác sẽ có thể sửa chữa phòng mà người khách đầu tiên đã tìm kiếm; Tuy nhiên không một ai sẽ có thể được phép để thay đổi phòng mà khách hàng đầu tiên đang tìm kiếm. Vấn đề này được thể hiện trong Hình 4.
- Hình 4. Ví dụ của mức độc lập tham chiếu ổn định Mức độc lập của đọc không ràng buộc Mức độc lập đọc không ràng buộc là mức độc lập cho phép ít hạn chế nhất. Trong thực tế, khi mức độc lập này được sử dụng các hàng được khôi phục bởi phiên làm việc chỉ được khóa nếu các phiên làm việc cố gắng làm giảm hoặc thay đổi bảng chứa các hàng được khôi phục. Bởi vì các hàng thường không được mở khóa khi mà mức độc lập này được sử dụng khi đó các bản ghi đọc thừa, đọc không lặp lại và được giả lập có thể xảy ra. Vì thế, mức độc lập đọc không ràng buộc là kiểu cơ bản được sử dụng cho các phiên làm việc cho phép truy cập các bảng chỉ đọc và hiển thị và cho phép các phiên làm việc thực thi các lệnh SELECT để dữ liệu không ràng buộc từ các phiên làm việc khác sẽ không có bất lợi tương ứng.
- Khi đó, phiên làm việc chạy dưới mức độc lập đọc không ràng buộc có thể nhìn thấy sự thay đổi đến các hàng bởi các phiên làm việc khác trước khi các thay đổi này được thực hiện đầy đủ. Tuy nhiên, mỗi một phiên làm việc có thể hoặc nhìn thấy hoặc không nhìn thấy bảng, nội dung và các chỉ số cái mà đã được làm yếu đi; phiên làm việc sử dụng đọc không ràng buộc sẽ chỉ đọc những cái gì mà đối tượng của nó không tồn tại lâu dài khi mà phiên làm việc thực hiện làm yếu đi được thực hiện hoàn thành. (Có một chú ý rằng khi phiên làm việc chạy trong mức độc lập không ràng buộc mà sử dụng chế độ cập nhật con trỏ phiên làm việc sẽ thu được hiệu quả nếu đang chạy dưới chế độ độc lập tham khảo ổn định và sự bắt buộc của mức độ độc lập tham khảo ổn định được áp dụng) Vậy áp dụng mức độc lập đọc không ràng buộc như thế nào vào ứng dụng đặt chỗ phòng khách sạn của bạn. Bây giờ, khi khách h àng duyệt cơ sở dữ liệu để có được danh sách các phòng để có thể đặt chỗ bạn sẽ có thể thực hiện thay đổi giá cho bất kỳ phòng nào trong khách sạn trong bất kỳ ngày nào. Ngược lại, các khách hàng khác có thể thực hiện hoặc hủy bỏ đặt chỗ cho bất kỳ phòng nào trong khách sạn bao gồm cả phòng mà khách hàng đang tìm kiếm. Thêm vào đó, danh sách các phòng cho khách hàng đầu tiên có thể chứa các bản ghi của các phòng mà các khách hàng khác đang xử lý để đặt chỗ và các phòng này thực sự là không có giá trị. Đặc tính này được mô phỏng trong Hình 5
- Hình 5. Ví dụ của mức độc lập đọc không ràng buộc Lựa chọn mức độc lập thích hợp Mức độc lập được sử dụng có thể ảnh hưởng như thế nào để hỗ trợ giải quyết vấn đề mâu thuẫn cơ sở dữ liệu và thực hiện các ứng dụng mâu thuẫn ra sao. Đơn giản như có nhiều hạn chế khi mức độc lập được sử dụng ví dụ như vẫn còn một chút mâu thuẫn - đó là sự thực hiện cho một số ứng dụng có thể làm giảm hiệu quả khi họ phải đợi để khóa trên các nguồn để phát hành. Vì vậy bạn phải quyết định xem mức độ độc lập nào được sử dụng? Cách tốt nhất là xác định các kiểu của trường hợp đặc biệt có thể không được chấp nhận và sau đó lựa chọn mức độc lập thích hợp để ngăn chặn các trường hợp đặc biệt này xảy ra: Sử dụng mức độc lập đọc lặp lại nếu bạn đang thực thi một lượng lớn các truy vấn và bạn không muốn các phiên làm việc có thể xảy ra đồng thời để
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Chuẩn bị cho kỳ thi cơ bản về DB2 9, Phần 2: Các vấn đề về bảo mật
75 p | 117 | 18
-
Chuẩn bị cho kỳ thi cơ bản về DB2 9, Phần 1: Lập kế hoạch cho DB2
86 p | 98 | 14
-
Chuẩn bị cho kỳ thi cơ bản về DB2 9, Phần 4: Làm việc với dữ liệu DB2
42 p | 84 | 10
-
Chuẩn bị cho kỳ thi 730 cơ bản về DB2 9, Phần 7: Giới thiệu về XQuery
68 p | 90 | 9
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn