Tìm kiếm hiệu quả không phân biệt dạng chữ với pureXML DB2
Số trang: 11
Loại file: pdf
Dung lượng: 630.84 KB
Lượt xem: 8
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Tìm kiếm và sắp xếp dữ liệu XML theo cách không phân biệt dạng chữ Matthias Nicola, Chuyên gia về hiệu năng CSDL, IBM Silicon Valley Laboratory Tóm tắt: Các giá trị của các phần tử và các thuộc tính XML, theo định nghĩa, là phân biệt dạng chữ. Ví dụ, nếu bạn tìm kiếm các phần tử cho giá trị "Paris", bạn sẽ không tìm thấy "PARIS" hoặc "paris".
Nội dung trích xuất từ tài liệu:
Tìm kiếm hiệu quả không phân biệt dạng chữ với pureXML DB2 Tìm kiếm hiệu quả không phân biệt dạng chữ với pureXML DB2Tìm kiếm và sắp xếp dữ liệu XML theo cách không phân biệt dạng chữMatthias Nicola, Chuyên gia về hiệu năng CSDL, IBM Silicon Valley LaboratoryTóm tắt: Các giá trị của các phần tử và các thuộc tính XML, theo định nghĩa, làphân biệt dạng chữ. Ví dụ, nếu bạn tìm kiếm các phần tử cho giá trị Paris,bạn sẽ không tìm thấy PARIS hoặc paris. Điều này có thể được giải quyếtbằng các hàm XQuery như fn:upper-case(), nhưng hiệu năng sẽ không phải luônluôn tối ưu do việc sử dụng các hàm như vậy cản trở việc sử dụng các chỉ sốXML. Bài viết này giải thích cách tạo ra một cơ sở dữ liệu không phân biệt dạngchữ khi sử dụng DB2® pureXML™ và hành vi hay xảy ra trong truy vấn XML vàcác chỉ mục XMLMục lục Case-insensitive search with upper/lower case functions Creating a case-insensitive database in DB2 Query XML data in a case-insensitive database Performance Summary Tìm kiếm không phân biệt dạng chữ với các hàm chữ hoa và chữ thườngVí dụ sau sẽ cho bạn một sự hiểu biết rõ ràng hơn về tìm kiếm không phân biệtdạng chữ. Liệt kê 1 định nghĩa một bảng có một cột số nguyên (INTEGER) và mộtcột XML và chèn 7 hàng vào trong bảng đó. Mỗi hàng có chứa một tài liệu kháchhàng nhỏ có chứa một phần tử XML .Các giá trị trong phần tử này khác nhau về chữ hoa và chữ thường. Một số giá trịtất cả là chữ hoa, một số giá trị tất cả là chữ thường và một số trường hợp trộn lẫn(ký tự chữ hoa đầu tiên). Điều này có thể xảy ra khi dữ liệu này đã đến từ mộtloạt các ứng dụng có sử dụng các quy tắc khác nhau để nhập vào dữ liệu chữ hoavà chữ thường.Liệt kê 1. Bảng và dữ liệu mẫuCREATE TABLE customer (id INTEGER, xmldoc XML);INSERT INTO customer (id, xmldoc) VALUES (1,PARIS), (2,Tokyo), (3,tokyo), (4,PARIS), (5,paris), (6,Delhi), (7,Paris);Một ứng dụng truy vấn các tài liệu XML này để tìm kiếm các khách hàng với mộtthành phố cụ thể hầu như đòi hỏi tìm kiếm không phân biệt dạng chữ. Ví dụ, bạncó thể muốn tìm tất cả các khách hàng ở Paris và hy vọng sẽ lấy ra hàng 1, 4, 5 và7. Tuy nhiên, nếu bạn tìm kiếm giá trị Paris, thì chỉ có hàng 7 được trả về. Đểtóm lấy tất cả bốn hàng mà bạn cần, bạn có thể sử dụng hàm XQuery fn:upper-case() để biến đổi các giá trị phần tử thành phố thành dạng chữ hoa và so sánhchúng với PARIS. Điều này được chỉ ra trong truy vấn trong Liệt kê 2 nó trả vềtất cả bốn khách hàng ở Paris.Liệt kê 2. Chọn các khách hàng ở ParisSELECT id, XMLCAST( XMLQUERY( $XMLDOC/Customer/city) ASVARCHAR(15)) AS cityFROM customerWHERE XMLEXISTS($XMLDOC/Customer[fn:upper-case(city) =PARIS]);Nếu truy vấn của bạn sử dụng một dấu tham số cho giá trị t ìm kiếm, rồi tham sốnày cũng sẽ được biến đổi sang dạng chữ hoa. Điều này được thể hiện trong Liệtkê 3. Dấu tham số (?) được gõ vào là VARCHAR(15) và được chuyển vào vị từXQuery như là biến c.Liệt kê 3. Chọn các khách hàng khi sử dụng một dấu tham sốSELECT id, XMLCAST( XMLQUERY( $XMLDOC/Customer/city) ASVARCHAR(15)) AS cityFROM customerWHERE XMLEXISTS($XMLDOC/Customer[fn:upper-case(city) = fn:upper-case($c)] PASSING CAST(? AS VARCHAR(15)) AS c);Hình 1 cho thấy kết quả đầu ra của các truy vấn thí dụ ở trên.Hình 1. Kết quả của truy vấn thí dụTất cả điều này thực hiện tốt nếu bạn đang truy vấn chỉ một số lượng nhỏ dữ liệuhoặc nếu các truy vấn của bạn cũng chứa các vị từ chọn như là vị từ dạng chữ hoađược áp dụng chỉ cho một tập kết quả trung gian nhỏ. Vấn đề là vị từ có hàmfn:upper-case() ngăn cản sử dụng các chỉ mục XML trong DB2. Do đó, cách tiếpcận này không thích hợp với số lượng lớn dữ liệu.Để tránh việc sử dụng hàm fn:upper-case() và lợi dụng các lợi ích của các chỉ mụcXML, cần thiết tạo ra một cơ sở dữ liệu không phân biệt dạng chữ.Tạo một cơ sở dữ liệu không phân biệt dạng chữ trong DB2DB2 hỗ trợ phép đối chiếu Unicode nhận biết-cục bộ kể từ Phiên bản 9.5 Bản sửalỗi 1. Điều này cho phép bạn bỏ qua dạng chữ và/hoặc các dấu. Để tạo một cơ sởdữ liệu không phân biệt dạng chữ cho tất cả các phép so sánh chuỗi, cần thiết sửdụng đối chiếu UCA500R1 như trong Liệt kê 4.Liệt kê 4. Tạo một cơ sở dữ liệu không phân biệt dạng chữCREATE DATABASE testdbUSING CODESET UTF-8 TERRITORY USCOLLATE USING UCA500R1_LEN_S2;Điều chuỗi UCA500R1_LEN_S2 có nghĩa chính xác gì? UCA500R1 UCA500R1xác định rằng Unicode Collation Algorithm (UCA –Thuật toán phép đối chiếuUnicode) mặc định dựa trên phiên bản 5.0.0 chuẩn Unicode được sử dụng trong cơsở dữ liệu này. Do UCA mặc định không thể kiểm soát đối chiếu chuỗi của mỗingôn ngữ được Unicode hỗ trợ cùng một lúc, việc bố trí các ký tự có thể được tùychỉnh bằng cách sử dụng các thuộc tính tùy chọn. Các thuộc tính này được phântách bằng một dấu gạch dưới (_). Từ khóa ...
Nội dung trích xuất từ tài liệu:
Tìm kiếm hiệu quả không phân biệt dạng chữ với pureXML DB2 Tìm kiếm hiệu quả không phân biệt dạng chữ với pureXML DB2Tìm kiếm và sắp xếp dữ liệu XML theo cách không phân biệt dạng chữMatthias Nicola, Chuyên gia về hiệu năng CSDL, IBM Silicon Valley LaboratoryTóm tắt: Các giá trị của các phần tử và các thuộc tính XML, theo định nghĩa, làphân biệt dạng chữ. Ví dụ, nếu bạn tìm kiếm các phần tử cho giá trị Paris,bạn sẽ không tìm thấy PARIS hoặc paris. Điều này có thể được giải quyếtbằng các hàm XQuery như fn:upper-case(), nhưng hiệu năng sẽ không phải luônluôn tối ưu do việc sử dụng các hàm như vậy cản trở việc sử dụng các chỉ sốXML. Bài viết này giải thích cách tạo ra một cơ sở dữ liệu không phân biệt dạngchữ khi sử dụng DB2® pureXML™ và hành vi hay xảy ra trong truy vấn XML vàcác chỉ mục XMLMục lục Case-insensitive search with upper/lower case functions Creating a case-insensitive database in DB2 Query XML data in a case-insensitive database Performance Summary Tìm kiếm không phân biệt dạng chữ với các hàm chữ hoa và chữ thườngVí dụ sau sẽ cho bạn một sự hiểu biết rõ ràng hơn về tìm kiếm không phân biệtdạng chữ. Liệt kê 1 định nghĩa một bảng có một cột số nguyên (INTEGER) và mộtcột XML và chèn 7 hàng vào trong bảng đó. Mỗi hàng có chứa một tài liệu kháchhàng nhỏ có chứa một phần tử XML .Các giá trị trong phần tử này khác nhau về chữ hoa và chữ thường. Một số giá trịtất cả là chữ hoa, một số giá trị tất cả là chữ thường và một số trường hợp trộn lẫn(ký tự chữ hoa đầu tiên). Điều này có thể xảy ra khi dữ liệu này đã đến từ mộtloạt các ứng dụng có sử dụng các quy tắc khác nhau để nhập vào dữ liệu chữ hoavà chữ thường.Liệt kê 1. Bảng và dữ liệu mẫuCREATE TABLE customer (id INTEGER, xmldoc XML);INSERT INTO customer (id, xmldoc) VALUES (1,PARIS), (2,Tokyo), (3,tokyo), (4,PARIS), (5,paris), (6,Delhi), (7,Paris);Một ứng dụng truy vấn các tài liệu XML này để tìm kiếm các khách hàng với mộtthành phố cụ thể hầu như đòi hỏi tìm kiếm không phân biệt dạng chữ. Ví dụ, bạncó thể muốn tìm tất cả các khách hàng ở Paris và hy vọng sẽ lấy ra hàng 1, 4, 5 và7. Tuy nhiên, nếu bạn tìm kiếm giá trị Paris, thì chỉ có hàng 7 được trả về. Đểtóm lấy tất cả bốn hàng mà bạn cần, bạn có thể sử dụng hàm XQuery fn:upper-case() để biến đổi các giá trị phần tử thành phố thành dạng chữ hoa và so sánhchúng với PARIS. Điều này được chỉ ra trong truy vấn trong Liệt kê 2 nó trả vềtất cả bốn khách hàng ở Paris.Liệt kê 2. Chọn các khách hàng ở ParisSELECT id, XMLCAST( XMLQUERY( $XMLDOC/Customer/city) ASVARCHAR(15)) AS cityFROM customerWHERE XMLEXISTS($XMLDOC/Customer[fn:upper-case(city) =PARIS]);Nếu truy vấn của bạn sử dụng một dấu tham số cho giá trị t ìm kiếm, rồi tham sốnày cũng sẽ được biến đổi sang dạng chữ hoa. Điều này được thể hiện trong Liệtkê 3. Dấu tham số (?) được gõ vào là VARCHAR(15) và được chuyển vào vị từXQuery như là biến c.Liệt kê 3. Chọn các khách hàng khi sử dụng một dấu tham sốSELECT id, XMLCAST( XMLQUERY( $XMLDOC/Customer/city) ASVARCHAR(15)) AS cityFROM customerWHERE XMLEXISTS($XMLDOC/Customer[fn:upper-case(city) = fn:upper-case($c)] PASSING CAST(? AS VARCHAR(15)) AS c);Hình 1 cho thấy kết quả đầu ra của các truy vấn thí dụ ở trên.Hình 1. Kết quả của truy vấn thí dụTất cả điều này thực hiện tốt nếu bạn đang truy vấn chỉ một số lượng nhỏ dữ liệuhoặc nếu các truy vấn của bạn cũng chứa các vị từ chọn như là vị từ dạng chữ hoađược áp dụng chỉ cho một tập kết quả trung gian nhỏ. Vấn đề là vị từ có hàmfn:upper-case() ngăn cản sử dụng các chỉ mục XML trong DB2. Do đó, cách tiếpcận này không thích hợp với số lượng lớn dữ liệu.Để tránh việc sử dụng hàm fn:upper-case() và lợi dụng các lợi ích của các chỉ mụcXML, cần thiết tạo ra một cơ sở dữ liệu không phân biệt dạng chữ.Tạo một cơ sở dữ liệu không phân biệt dạng chữ trong DB2DB2 hỗ trợ phép đối chiếu Unicode nhận biết-cục bộ kể từ Phiên bản 9.5 Bản sửalỗi 1. Điều này cho phép bạn bỏ qua dạng chữ và/hoặc các dấu. Để tạo một cơ sởdữ liệu không phân biệt dạng chữ cho tất cả các phép so sánh chuỗi, cần thiết sửdụng đối chiếu UCA500R1 như trong Liệt kê 4.Liệt kê 4. Tạo một cơ sở dữ liệu không phân biệt dạng chữCREATE DATABASE testdbUSING CODESET UTF-8 TERRITORY USCOLLATE USING UCA500R1_LEN_S2;Điều chuỗi UCA500R1_LEN_S2 có nghĩa chính xác gì? UCA500R1 UCA500R1xác định rằng Unicode Collation Algorithm (UCA –Thuật toán phép đối chiếuUnicode) mặc định dựa trên phiên bản 5.0.0 chuẩn Unicode được sử dụng trong cơsở dữ liệu này. Do UCA mặc định không thể kiểm soát đối chiếu chuỗi của mỗingôn ngữ được Unicode hỗ trợ cùng một lúc, việc bố trí các ký tự có thể được tùychỉnh bằng cách sử dụng các thuộc tính tùy chọn. Các thuộc tính này được phântách bằng một dấu gạch dưới (_). Từ khóa ...
Tìm kiếm theo từ khóa liên quan:
quản trị dữ liệu lập trình XML ngôn ngữ SQL data base hệ quản trị lưu trữ dữ liệu bộ nhớGợi ý tài liệu liên quan:
-
Đáp án đề thi học kỳ 2 môn cơ sở dữ liệu
3 trang 309 1 0 -
PHÂN TÍCH THIẾT KẾ HỆ THỐNG XÂY DỰNG HỆ THỐNG ĐẶT VÉ TÀU ONLINE
43 trang 281 2 0 -
8 trang 263 0 0
-
6 trang 170 0 0
-
Hướng dẫn tạo file ghost và bung ghost
12 trang 152 0 0 -
Hướng dẫn sử dụng Mapinfo Professional-Phần cơ bản
57 trang 84 0 0 -
Phát triển Java 2.0: Phân tích dữ liệu lớn bằng MapReduce của Hadoop
12 trang 71 0 0 -
150 trang 68 0 0
-
Đồ án tốt nghiệp ngành Công nghệ thông tin: Áp dụng các kỹ thuật trong big data vào lưu trữ dữ liệu
96 trang 67 1 0 -
Giáo trình Nhập môn cơ sở dữ liệu: Phần 2 - Trần Thành Trai
145 trang 65 0 0