Hãy khởi đầu nhanh chóng với DB2 9 pureXML, Phần 1: XML là lõi

Bản phát hành DB2® 9 của IBM® mô tả một kiến trúc quan trọng là Ideparture khác với các phiên bản trước. Đây là lần đầu tiên kể từ khi ra mắt, DB2 cho Linux®, UNIX®, và Windows® đang cung cấp một ngôn ngữ truy vấn mới, công nghệ lưu trữ mới, công nghệ lập chỉ mục mới và các tính năng khác để hỗ trợ cho dữ liệu XML và cấu trúc phân cấp vốn có của nó. Nhưng đừng lo lắng quá, vì tất cả các tính năng quản lý cơ sở dữ liệu truyền thống của DB2 vẫn còn nguyên, bao gồm cả sự hỗ trợ của nó cho SQL và các cấu trúc dữ liệu dạng bảng. Hãy khám phá công nghệ XML của DB2 9 và tìm hiểu lý do tại sao bây giờ IBM coi DB2 là hệ thống quản lý cơ sở dữ liệu "lai" hoặc đa-cấu trúc (DBMS).

Lưu ý: Được viết lần đầu vào năm 2006, bài viết này luôn được cập nhật để theo kịp với các thay đổi sản phẩm trong phiên bản 9.5 và 9.7 của DB2.

Cynthia M. Saracco, Kiến trúc giải pháp cao cấp, IBM

Cynthia M. Saracco là kiến trúc sư giải pháp cao cấp tại Phòng thí nghiệm ở Thung lũng Silicon của IBM, bà chuyên về các công nghệ mới xuất hiện và các chủ đề quản lý cơ sở dữ liệu. Bà có 23 năm kinh nghiệm về công nghiệp phần mềm, đã viết 3 cuốn sách và hơn 60 tài liệu kỹ thuật và có 7 bằng sáng chế.



11 03 2010 (Xuất bản lần đầu tiên vào ngày 29 07 2011)

Mở đầu

Quản lý các dạng dữ liệu mới thường để lộ ra nhiều thách thức mới. Nhiều nhà lãnh đạo công nghệ thông tin đã phát hiện ra đó chính là trường hợp khi nói về dữ liệu theo định dạng của Ngôn ngữ đánh dấu mở rộng (XML).

Thường, các lựa chọn rõ ràng để quản lý và chia sẻ dữ liệu XML vẫn không cắt bỏ được nó. Các hệ thống tệp đang dùng tốt cho các nhiệm vụ đơn giản, nhưng lại không mở rộng tốt khi bạn cần đương đầu với một lượng lớn tài liệu. Không thể quản lý nổi các vấn đề đồng quy, khôi phục, an ninh và dễ sử dụng. Các hệ thống quản lý cơ sở dữ liệu quan hệ thương mại (DBMS) giải quyết được các vấn đề đó, nhưng lại thất bại trong các lĩnh vực khác. Chúng cung cấp hai tùy chọn thiết kế cơ sở dữ liệu cơ bản -- lưu trữ từng tài liệu XML nguyên vẹn như là một đối tượng lớn đơn lẻ hoặc thường "băm nhỏ" nó thành nhiều cột trên nhiều bảng. Trong nhiều tình huống, các tùy chọn này đưa vào các vấn đề hiệu năng, các thách thức quản trị, tính phức tạp truy vấn tăng lên và các vấn đề khác. Cuối cùng, các DBMS chỉ cho-XML đưa một môi trường mới hầu như chưa qua thử thách vào cơ sở hạ tầng công nghệ thông tin, làm tăng các mối quan tâm về tích hợp, các kỹ năng nhân viên và khả năng tồn tại lâu dài.

Bản phát hành phiên bản 9 của DB2 cho các nền tảng Linux, Unix và Windows giới thiệu tùy chọn khác. Bản phát hành này hỗ trợ dữ liệu XML như là một kiểu lớp hạng nhất. Để làm như vậy, IBM mở rộng DB2 để bao gồm:

  • Các kỹ thuật lưu trữ mới để quản lý hiệu quả các cấu trúc phân cấp vốn có trong các tài liệu XML.
  • Công nghệ lập chỉ mục mới để tăng tốc độ các tìm kiếm trên và trong các tài liệu XML.
  • Sự hỗ trợ ngôn ngữ truy vấn mới (cho XQuery), một trình xây dựng (builder) truy vấn đồ họa mới (cho XQuery) và các kỹ thuật tối ưu hóa truy vấn mới.
  • Sự hỗ trợ mới để xác nhận hợp lệ dữ liệu XML dựa vào các lược đồ do người dùng cung cấp.
  • Các khả năng quản trị, bao gồm phần mở rộng cho các tiện ích cơ sở dữ liệu quan trọng.
  • Tích hợp với các giao diện lập trình ứng dụng phổ biến (các API).
  • Sự hỗ trợ của XML trong một môi trường kho dữ liệu khi có thêm sự hỗ trợ XML với tính năng phân vùng dữ liệu (DPF), phân vùng phạm vi và phân cụm nhiều chiều (MDC) trong phiên bản V9.7.

Điều quan trọng cần lưu ý là sự hỗ trợ "nguyên gốc" của DB2 cho XML nằm ngoài sự hỗ trợ hiện có của nó cho các công nghệ khác, bao gồm cả SQL, các cấu trúc dữ liệu dạng bảng và các tính năng DBMS khác nhau. Kết quả là, những người dùng có thể tạo một đối tượng cơ sở dữ liệu đơn để quản lý cả hai dữ liệu SQL "truyền thống" lẫn các tài liệu XML. Hơn nữa, họ có thể viết một truy vấn đơn để tìm kiếm và tích hợp cả hai dạng dữ liệu.

Bài viết này tìm hiểu các tính năng này khi chúng ta đi sâu vào nghiên cứu sự hỗ trợ XML nguyên gốc của DB2. Mặc dù vậy, trước tiên chúng ta hãy xem xét lý do tại sao việc quản lý dữ liệu XML đúng cách lại quan trọng.


Các lợi ích tiềm năng

Với số lượng các công ty ngày càng tăng đang chuyển sang XML để giúp họ triển khai thực hiện các kiến trúc hướng dịch vụ (SOA), trao đổi dữ liệu giữa các hệ thống và các ứng dụng khác nhau và thích ứng với các điều kiện nghiệp vụ thay đổi nhanh, nhiều nhà lãnh đạo công nghệ thông tin có hiểu biết đang tìm cách chia sẻ, tìm kiếm và quản lý có hiệu quả sự phong phú của các tài liệu và các thông báo XML mà các công ty của họ đang tạo ra. Sự hỗ trợ XML mới của DB2 được thiết kế để giúp cho các doanh nghiệp giảm thiểu thời gian và nỗ lực đã dùng để tiếp tục duy trì và sử dụng dữ liệu XML của họ. Dần dần, điều này có thể làm giảm chi phí phát triển và nâng cao tính linh hoạt nghiệp vụ.

Ví dụ, bài "Sử dụng XML nguyên gốc của DB2 với PHP" (developerWorks, 10.2005) minh họa cách hỗ trợ XML mới của DB2 làm giảm tính phức tạp của thiết kế cơ sở dữ liệu và mã ứng dụng cần thiết để hỗ trợ trang web thương mại điện tử. Tương tự như vậy, bài "Quản lý XML để thu được nhiều nhất" (IBM, 11.2005) bàn về những trải nghiệm ban đầu của khách hàng bao gồm các kịch bản thử nghiệm so sánh cũng cho thấy những tiết kiệm nhân công tiềm năng và vòng đời được cải thiện.

Có cái gì ở phía sau những lợi ích này? DB2 cho phép những người dùng lưu trữ các tài liệu XML nguyên vẹn với đầy đủ kiến thức của DBMS về cấu trúc bên trong của tài liệu. Điều này loại trừ hoặc giảm thiểu các nhiệm vụ quản trị và lập trình liên quan đến các lựa chọn thay thế khác. Hơn nữa, nó có thể tăng tốc độ các tìm kiếm trên và trong các tài liệu và nó cho phép các khách hàng điều chỉnh các thay đổi dễ dàng hơn theo các yêu cầu nghiệp vụ được phản ánh trong các lược đồ XML.


Tổng quan về kiến trúc

DB2 cho phép ứng dụng máy khách làm việc với cả hai cấu trúc dữ liệu dạng bảng và XML thông qua ngôn ngữ truy vấn lựa chọn của chúng -- SQL (bao gồm cả SQL với các phần mở rộng XML, thường được gọi là "SQL/XML") hoặc XQuery. Như trong Hình 1, các thành phần mức-máy trong các truy vấn hỗ trợ DB2 được quy định theo cả hai ngôn ngữ.

Hình 1. Kiến trúc của bản phát hành DB2 9 mới
Biểu đồ cho thấy ứng dụng khách DB2 giao tiếp hoặc qua SQL/XML đến một giao diện quan hệ trên máy chủ DB2 hoặc qua XQuery đến một giao diện XML trên máy chủ DB2. Ở tầng sau là hai kiểu lưu trữ: quan hệ và XML.

Để quản lý có hiệu quả các kiểu dữ liệu SQL truyền thống và dữ liệu XML, DB2 có hai cơ chế lưu trữ riêng biệt. Chúng ta sẽ thảo luận về công nghệ lưu trữ pureXML® ngay. Tuy nhiên, điều quan trọng cần lưu ý là cơ chế lưu trữ cơ bản được sử dụng cho một kiểu dữ liệu cụ thể là trong suốt với ứng dụng. Nói cách khác, ứng dụng không cần quy định rõ ràng cơ chế lưu trữ nào cần sử dụng hoặc quản lý các khía cạnh vật lý của lưu trữ, chẳng hạn như chia nhỏ các phần của tài liệu XML trên nhiều trang cơ sở dữ liệu. Nó chỉ đơn giản là sử dụng các lợi ích hiệu năng thời gian chạy để lưu trữ và truy vấn dữ liệu theo một định dạng có hiệu quả với dữ liệu đích.

Hãy nghiên cứu kỹ các tính năng XML của DB2 theo quan điểm người dùng.


Lưu trữ hợp lý

Các bộ sưu tập các tài liệu XML được lưu trữ trong các bảng DB2 có chứa một hoặc nhiều cột theo kiểu dữ liệu XML mới. Điều này cho phép các quản trị viên sử dụng các câu lệnh của ngôn ngữ định nghĩa dữ liệu (DDL) SQL quen thuộc để tạo các đối tượng cơ sở dữ liệu nhằm tiếp tục sử dụng dữ liệu XML của họ. Tuy nhiên, giao diện quen thuộc này che dấu thực tế là DB2 lưu trữ dữ liệu XML theo cách khác nhau, khi sử dụng công nghệ mới để bảo tồn cấu trúc phân cấp dữ liệu XML và hỗ trợ các tìm kiếm có hiệu quả bao trùm tất cả hoặc một phần dữ liệu XML ban đầu.

Để dễ dàng tích hợp các dạng dữ liệu nghiệp vụ truyền thống với dữ liệu XML cho những người dùng, các quản trị viên DB2 có thể tạo ra các bảng có chứa các cột có cả hai kiểu dữ liệu SQL truyền thống lẫn kiểu dữ liệu XML mới. Đây là ví dụ về một bảng như vậy:

Liệt kê 1. Tạo một bảng có một cột XML
create table items (
	id 	 	int 	primary key not null,
	brandname 	varchar(30), 
	itemname	varchar(30),
	sku		int, 
	srp		decimal(7,2),
	comments	xml
)

Năm đầu tiên cột của bảng này sử dụng các kiểu dữ liệu SQL truyền thống để theo dõi thông tin về từng mặt hàng để bán, bao gồm số mã định danh ID, tên thương hiệu, tên mặt hàng, mã hàng trong kho (SKU) và giá bán lẻ đề xuất (SRP). Một cột "comments" (các ý kiến) chứa dữ liệu XML có ý kiến phản hồi của khách hàng đã chia sẻ về mặt hàng đó.

Lưu ý rằng không quy định cấu trúc bên trong của dữ liệu XML khi tạo một bảng có một cột XML. Đây là do thiết kế. Các tài liệu XML là tự mô tả và cấu trúc bên trong của chúng có thể thay đổi đáng kể. Yêu cầu duy nhất của DB2 để lưu trữ dữ liệu XML là nó phải "đúng định dạng" -- có nghĩa là, nó phải tuân thủ các quy tắc cú pháp nhất định được quy định trong "tiêu chuẩn W3C cho XML" (xem phần "Tài nguyên"). Cách tiếp cận tự do của DB2 tạo cho người dùng sự linh hoạt đáng kể và dễ dàng lưu trữ các bộ sưu tập của các tài liệu XML có chứa các thuộc tính và cấu trúc bên trong khác nhau tùy theo phát triển các yêu cầu hoặc các tình huống nghiệp vụ ở nơi còn thiếu thông tin hoặc thông tin không phù hợp.

Tuy nhiên, những người dùng muốn đảm bảo rằng dữ liệu XML tuân theo các quy tắc cấu trúc riêng của họ có thể ra lệnh cho DB2 xác nhận hợp lệ dữ liệu của họ trước khi lưu trữ. Điều này được thảo luận chi tiết hơn trong bài "Các lược đồ và xác nhận hợp lệ XML." Về cơ bản làm như vậy đòi hỏi tạo ra các lược đồ XML (đó cũng là một phần của tiêu chuẩn XML của W3C) và đăng ký các lược đồ này với DB2. (Xem phần "Tài nguyên" để biết thêm thông tin về các lược đồ XML).

Vào lúc này, bạn có thể tự hỏi làm thế nào để những người dùng điền vào một bảng DB2 với dữ liệu XML. Câu trả lời này là đơn giản -- để làm việc này họ sử dụng một trong ba cơ chế DB2 quen thuộc. Các câu lệnh INSERT của SQL cũng như phương tiện IMPORT của DB2 đều cung cấp dữ liệu XML bên cạnh các kiểu dữ liệu khác. (IMPORT của DB2 ban hành các câu lệnh INSERT sau hậu trường). Load cũng hỗ trợ các câu lệnh chèn của XML, được thêm vào trong DB2 9.5. Nếu bạn đang tự hỏi tại sao DB2 chỉ hỗ trợ các câu lệnh chèn dữ liệu qua SQL mà không qua XQuery, thì câu trả lời đó khá đơn giản, -- phiên bản đầu tiên của tiêu chuẩn XQuery mới nổi tập trung vào các hoạt động đọc cơ sở dữ liệu, chứ không ghi các hoạt động. Trong trường hợp thiếu một tiêu chuẩn được chấp nhận rõ ràng, IBM đã chọn cung cấp cho người dùng của mình hai phương tiện quen thuộc để tiếp tục sử dụng dữ liệu XML mới. (Xem phần "Tài nguyên" để biết thêm thông tin về các tiêu chuẩn XQuery).


Lưu trữ vật lý

Do là một vấn đề thực tế, nên hầu hết ngững người dùng chẳng cần bận tâm đến kiến trúc quản lý lưu trữ vật lý mới của DB2 cho dữ liệu XML. Tuy nhiên, để giúp bạn hiểu những gì DB2 đang làm sau hậu trường, chúng ta hãy thảo luận ngắn gọn về cách tiếp cận bên trong của nó để lưu trữ dữ liệu XML.

DB2 lưu trữ và thao tác dữ liệu XML theo một định dạng được phân tích cú pháp phản ánh bản chất phân cấp của tài liệu XML ban đầu. Như vậy, nó sử dụng các cây và các nút làm mô hình của mình để lưu trữ và xử lý dữ liệu XML. Nếu những người sử dụng ra lệnh cho DB2 xác nhận hợp lệ dữ liệu XML của họ dựa vào một lược đồ XML đã đăng ký trước khi lưu trữ, thì DB2 sẽ chú thích tất cả các nút trong phân cấp XML với thông tin về các kiểu lược đồ.

Dựa vào định nghĩa ở trên về một bảng "items" (các mặt hàng), chúng ta hãy xem xét lại một tài liệu XML mẫu được lưu trữ trong bảng đó. Như trong Liệt kê 2 và được minh họa trong Hình 2, tài liệu XML này chứa nhiều phần tử được biểu diễn theo một hệ thống phân cấp, bao gồm một phần tử gốc Comments và một hay nhiều phần tử con Comment (ý kiến) liên quan đến một mặt hàng cụ thể. Một trình nhận dạng ý kiến được kết hợp với mỗi ý kiến, thông tin về khách hàng có thể bao gồm các phần tử con có tên và địa chỉ email của khách hàng, văn bản thông báo hay ý kiến của khách hàng và một chỉ số về liệu khách hàng có muốn hay không muốn trả lời không.

Liệt kê 2. Tài liệu XML mẫu
<Comments>
   <Comment>
      <CommentID>133</CommentID>
      <Customer>
         <Name>John Doe</Name>
         <Email>johndoe@any_isp.com</Email>
      </Customer>
      <Message>Heels on shoes wear out too quickly.</Message>
      <ResponseRequested>No</ResponseRequested>
   </Comment>
   . . .
</Comments>
Hình 2. Biểu diễn hệ thống phân cấp của tài liệu XML trong Liệt kê 2
Biểu đồ cho thấy Comments ở mớc cao nhất, Comment ở mức thứ hai và CommentID, Customer, Message và ResponseRequested ở mức thứ ba

Khi lưu trữ, DB2 sẽ bảo toàn cấu trúc bên trong của tài liệu này, chuyển đổi các tên thẻ của nó và thông tin khác thành các giá trị số nguyên. Làm như vậy sẽ giúp bảo tồn không gian đĩa và cũng cải thiện hiệu năng của các truy vấn sử dụng các biểu thức chuyển hướng. Ví dụ, DB2 có thể chuyển đổi thẻ "Comments" (Các ý kiến) trong Hình 2 tới giá trị "0" khi lưu trữ. Tuy nhiên, người dùng không nhận biết được về cách biểu diễn bên trong này.

Cuối cùng, DB2 sẽ tự động chia nhỏ các phần của một tài liệu — đó là, các nút của cây tài liệu — trên nhiều trang cơ sở dữ liệu khi cần thiết. Thật vậy, DB2 có thể chia nhỏ một bộ sưu tập (hoặc cây con) của các nút ở mức phân cấp tài liệu bất kỳ khi cần thiết. Trong các trường hợp như vậy, DB2 tự động tạo ra và duy trì một chỉ mục "các vùng" để cung cấp một phương tiện hiệu quả giúp theo dõi biểu diễn vật lý toàn bộ tài liệu. Không gian lưu trữ các tài liệu XML này được được gọi là Vùng đối tượng dữ liệu XML (XDA).

Nếu sử dụng tùy chọn "nội tuyến" cho bảng tạo và toàn bộ tài liệu XML đủ nhỏ để lấp đầy trang, thì nó sẽ được lưu trữ cùng với dữ liệu quan hệ và không nằm trong vùng XDA. Tuy nhiên, nếu tài liệu quá lớn, thì DB2 sẽ tự động chia nhỏ tài liệu đó như mô tả ở trên. Tùy chọn nội tuyến đã được đưa vào trong DB2 9.5. Cũng các tùy chọn khác được đưa vào trong phiên bản 9.5 là khả năng tuyến bố "có nén" trong khi tạo hoặc thay đổi bảng và không chỉ nén dữ liệu quan hệ, mà còn nội tuyến cả dữ liệu XML nữa. Trong thực tế, DB2 đã tiến một bước xa hơn trong phiên bản 9.7 — việc thiết lập nén trên một bảng trong phiên bản 9.7 cũng nén các tài liệu XML trong vùng XDA.


Lập chỉ mục

Cùng với sự hỗ trợ quản lý lưu trữ phân cấp mới cho XML, DB2 mô tả công nghệ lập chỉ mục mới để tăng tốc các tìm kiếm liên quan đến dữ liệu XML. Giống như các bản sao quan hệ của chúng, các chỉ mục XML mới này được tạo ra bằng một câu lệnh DDL của SQL quen thuộc: CREATE INDEX. Tuy nhiên, ngoài việc quy định cột đích để lập chỉ mục, những người dùng cũng quy định một "xmlpattern" -- về cơ bản, là một biểu thức XPATH không có các biến vị ngữ -- để nhận biết tập hợp con của tài liệu XML quan tâm.

Ví dụ, việc sử dụng định nghĩa bảng "items" nói trên và tài liệu XML mẫu tương ứng được hiển thị trong Liệt kê 2, một quản trị viên có thể đưa ra câu lệnh sau (xem Liệt kê 3) để lập chỉ mục tất cả các trình định danh ý kiến (các giá trị "CommentID") có chứa trong cột "comments". Nhớ lại rằng phần tử CommentID trong tài liệu mẫu của chúng ta là một phần tử con của phần tử Comment, mà chính phần tử Comment lại là một phần tử con của phần tử Comments gốc.

Liệt kê 3. Tạo một chỉ mục cho một cột XML
create index myindex on items(comments) generate key 
using xmlpattern '/Comments/Comment/CommentID' as sql double

Có một vài chi tiết đáng chú ý. Đường dẫn quy định trong mệnh đề "xmlpattern" là trường hợp cụ thể. Như vậy, "/Comments/Comment/CommentID" sẽ không lập chỉ mục các giá trị phần tử XML giống như "/comments/comment/commentid." Hơn nữa, vì DB2 không đòi hỏi một lược đồ XML đơn cho một cột XML cụ thể, nên DB2 có thể không biết kết hợp kiểu dữ liệu nào với mẫu đã quy định. Những người dùng phải quy định rõ ràng kiểu dữ liệu bằng cách sử dụng một trong các kiểu SQL được hỗ trợ (VARCHAR, VARCHAR HASHED, DOUBLE, DATETIMESTAMP).

Cuối cùng, mặc dù một câu lệnh SQL DDL được sử dụng để tạo ra một chỉ mục XML, một chỉ mục trên dữ liệu XML không giống như một chỉ mục trên các cột của các kiểu dữ liệu SQL truyền thống. Trong khi các chi tiết về công nghệ lập chỉ mục XML của DB2 vượt quá phạm vi của bài viết này, bạn có thể nhận thấy hai sự khác biệt quan trọng:

  • Các chỉ mục cho dữ liệu XML thông thường chỉ bao gồm một tập hợp con của các nội dung của tài liệu (của cột). Ngược lại, các chỉ mục cho dữ liệu SQL truyền thống luôn bao gồm toàn bộ nội dung của cột.
  • Một dòng duy nhất trong một bảng có thể dẫn đến nhiều mục nhập chỉ mục XML vì một tài liệu XML đơn có thể chứa không, một hoặc nhiều "nút" phù hợp với xmlpattern đã quy định. Ngược lại, một chỉ mục không-XML chứa một mục nhập cho mỗi hàng trong bảng.

Đối với các ứng dụng cụ thể, việc tìm kiếm toàn văn bản có thể rất quan trọng. IBM đã mở rộng các khả năng tìm kiếm văn bản trước đó của DB2 để bao gồm dữ liệu đã lưu trữ trong các cột XML. Các phần mở rộng cho câu lệnh CREATE INDEX cho phép các quản trị viên tạo các chỉ mục toàn văn bản để giúp cải thiện hiệu năng cho các tìm kiếm như vậy.


Ngôn ngữ và tối ưu hóa truy vấn

Sự hỗ trợ pureXML của DB2 bao gồm các khả năng của ngôn ngữ truy vấn mới. Bây giờ các lập trình viên có thể tìm kiếm dữ liệu bằng SQL hay XQuery, một ngôn ngữ truy vấn mới hỗ trợ các biểu thức dẫn hướng (hoặc dựa vào đường dẫn). Thật vậy, các ứng dụng có thể tự do sử dụng các câu lệnh trong cả hai ngôn ngữ truy vấn và trên thực tế một câu lệnh truy vấn đơn có thể kết hợp cả hai SQL và XQuery.

Chúng ta không có thời gian để khám phá cả chiều rộng lẫn chiều sâu của những khả năng này trong bài viết này, vì vậy chúng ta chỉ thảo luận về một vài điểm nổi bật. Nếu bạn là một lập trình viên SQL chưa có kinh nghiệm về XML từ trước, bạn sẽ cảm thấy yên lòng khi biết rằng một câu lệnh SQL đơn giản sẽ cho phép bạn lấy ra các nội dung của dữ liệu được lưu trữ trong các cột XML. Ví dụ, hai truy vấn quen thuộc này sẽ trả về tất cả dữ liệu trong bảng 'items' có liên quan tới mã hàng trong kho (SKU), bao gồm các tài liệu XML có các ý kiến của khách hàng:

Liệt kê 4. Truy vấn dữ liệu XML bằng SQL
select * from items where sku = 112233

select id, brandname, itemname, sku, srp, comments from items
    where sku = 112233

Bây giờ hãy xem xét một tình huống hơi khác một chút, trong đó bạn muốn chỉ lấy ra các thông báo được chứa trong các ý kiến khách hàng của bảng "items" và bạn muốn làm như vậy bằng XQuery. Đây có lẽ là cách đơn giản nhất để tạo câu lệnh:

Liệt kê 5. Truy vấn dữ liệu XML bằng XQuery
xquery db2-fn:xmlcolumn('ITEMS.COMMENTS')/Comments/Comment/Message

Vì DB2 hỗ trợ hai ngôn ngữ truy vấn, nên những người dùng phải đặt tiền tố trước các câu lênh XQuery bằng từ khóa "xquery". Hàm "db2-fn: xmlcolumn" là một cách để chỉ rõ dữ liệu đích được truy vấn. Nó đòi hỏi một tham số quy định cột XML của bảng mong muốn - trong trường hợp này, cột COMMENTS của bảng ITEMS. Bạn đã giới hạn thêm dữ liệu đích của mình theo một tập hợp con cụ thể của dữ liệu XML -- trong trường hợp này, cột COMMENTS của bảng ITEMS. Bạn đã giới hạn thêm dữ liệu đích của mình theo một tập hợp con cụ thể của dữ liệu XML -- cụ thể là, các giá trị của phần tử "Message" (thông báo), là một phần tử con của phần tử "Comment", mà chính phần tử "Comment" lại là một phần tử con của phần tử "Comments" gốc. (Xem Hình 2.)

Có thể tạo truy vấn tương tự bằng cách sử dụng các biểu thức FLWOR thường được kết hợp với các câu lệnh của XQuery. Các biểu thức FLWOR -- một cách đề cập không chính thức cho các mệnh đề for, let, where, order byreturn -- cho phép các lập trình viên truy vấn lặp lại qua các nhóm nút trong các tài liệu XML và liên kết các biến với các kết quả trung gian. Đối với truy vấn mẫu này, bạn có thể sử dụng các biểu thức forreturn để lấy các thông báo từ các ý kiến của khách hàng, như được hiển thị ở đây:

Liệt kê 6. Sử dụng mệnh đề FORRETURN của XQuery
xquery for $y in db2-fn:xmlcolumn('ITEMS.COMMENTS')/Comments/Comment 
return ($y/Message)

Cần lưu ý là IBM Data Studio V2.2.0.1 (bản thay thế miễn phí cho Control Center-Trung tâm điều khiển) và Optim Development Studio V2.2, cả hai công cụ phát triển dựa trên Eclipse, bao gồm một trình xây dựng XQuery đồ họa để giúp những người dùng tạo và thử nghiệm các truy vấn.

Có thể kết hợp cả SQL lẫn XQuery trong một câu lệnh đơn để giới hạn các tìm kiếm với cả hai cột XML và cột không-XML. Ví dụ, hãy xem xét câu lệnh XQuery sau đây:

Listing 7. Combining SQL and XQuery in one statement
xquery db2-fn:sqlquery('select comments from items 
where srp > 100')/Comments/Comment/Message

Mệnh đề db2-fn:sqlquery giới hạn đầu vào cho câu lệnh XQuery rộng hơn, cụ thể là, chỉ có các ý kiến của khách hàng gắn với các mặt hàng mang một giá bán lẻ đề xuất (srp) lớn hơn $100 mới được lưu hành làm đầu vào. Hơn nữa thông tin XQuery cho thấy rằng DB2 chỉ nên trả về các phần "Message" của các ý kiến như vậy.

Một số tờ báo và các trang web có thể giúp bạn tăng tốc dựa trên các phần mở rộng SQL/XML của DB2, sự hỗ trợ của DB2 cho XQuery và các tiêu chuẩn XQuery mới nổi. (Xem phần "Tài nguyên" về các con trỏ).

Cuối cùng, cuộc thảo luận này về các ngôn ngữ truy vấn có thể phó mặc cho bạn tìm hiểu về một chủ đề liên quan: đó là tối ưu hóa truy vấn. DB2 có hai trình phân tích cú pháp ngôn ngữ truy vấn: Một cho XQuery và một cho SQL. Cả hai đều tạo ra một biểu thị bên trong, ngôn ngữ trung gian, chung của các truy vấn. Điều này có nghĩa là các truy vấn được viết bằng cả hai ngôn ngữ được cung cấp đủ toàn bộ các lợi ích của các kỹ thuật tối ưu hóa truy vấn dựa trên chi phí của DB2, bao gồm việc viết lại có hiệu quả các toán tử truy vấn và chọn một kế hoạch truy cập dữ liệu có chi phí thấp. Ngoài ra, DB2 có thể sử dụng toán tử truy vấn và toán tử nối mới, cũng như các kỹ thuật xử lý chỉ mục mới, để tạo ra hiệu năng thời gian chạy mạnh mẽ cho các truy vấn liên quan đến các tài liệu XML.


Lược đồ và xác nhận hợp lệ XML

Tính chất linh hoạt của XML đôi khi có liên quan đến các chuyên gia cơ sở dữ liệu đang lo lắng về chất lượng dữ liệu. Như chúng ta đã thấy, DB2 cho phép những người dùng lưu trữ bất kỳ tài liệu XML đúng định dạng nào vào cột bất kỳ được định nghĩa theo kiểu dữ liệu XML mới. Như vậy, một cột đơn có thể chứa các tài liệu có các cấu trúc (hoặc các lược đồ) khác nhau cũng như nội dung khác nhau. Khi nhận được tính chất dữ liệu không rõ ràng hoặc khó dự đoán được, thì sự linh hoạt như vậy có thể là một yêu cầu thuần túy. Nhưng trong trường hợp khác, nó có thể là một trách nhiệm pháp lý. Đó là lý do tại sao DB2 cung cấp cho người dùng tùy chọn đăng ký các lược đồ XML của họ và ra lệnh cho DB2 xác nhận hợp lệ các tài liệu XML dựa vào các lược đồ này trước khi lưu trữ.

Nếu bạn chưa quen với các lược đồ XML, thì chúng là các tài liệu XML đúng định dạng đơn giản, điều khiển cấu trúc và nội dung của các tài liệu khác. Ví dụ, các lược đồ XML quy định các phần tử nào là hợp lệ, thứ tự xuất hiện của các phần tử này trong một tài liệu, các kiểu dữ liệu XML nào được liên kết với mỗi phần tử và v.v.. Các công cụ khác nhau có thể giúp bạn tạo các lược đồ XML từ các tài liệu XML hiện có, bao gồm các sản phẩm Rational®.

Những người dùng có thể chọn lưu trữ các tài liệu XML khác nhau, tương ứng với các lược đồ đã đăng ký khác nhau trong một cột đơn. Điều này quan trọng vì việc phát triển các yêu cầu nghiệp vụ có thể ảnh hưởng đến cấu trúc và nội dung của dữ liệu cần được nắm bắt. Khi xem xét bảng "items" (các mặt hàng) nói trên của chúng ta, hãy tưởng tượng rằng một vài tháng sau khi bảng này đã được triển khai bạn đã quyết định nắm bắt thêm thông tin trong các cột XML, ví dụ như thêm thông tin liên hệ của khách hàng, một bản ghi về các hành động nhận được để đáp ứng với các ý kiến nhất định và v.v.. DB2 có thể cung cấp các cải tiến mới này mà không bắt buộc những người dùng thay đổi cấu trúc của bảng hay bất kỳ các ứng dụng nào dựa vào nó. Thật vậy, dữ liệu hiện có (dựa trên một lược đồ XML "cũ") có thể vẫn còn ở đúng chỗ và có thể thêm dữ liệu mới để tuân thủ một hoặc nhiều lược đồ mới. Theo cách này, các quản trị viên có thể hỗ trợ các yêu cầu nghiệp vụ mới với chi phí và thời gian triển khai tối thiểu. Hơn nữa, để làm như vậy họ không cần phải làm tổn hại đến sự toàn vẹn dữ liệu XML của mình -- họ có thể chỉ cần cung cấp cho DB2 với thông tin mới về những gì là "hợp lệ" với dữ liệu XML của họ.

Việc đăng ký một lược đồ XML trong kho lưu trữ bên trong của DB2 là đơn giản. DB2 cung cấp các thủ tục đã lưu để tự động hóa quá trình hoặc các quản trị viên có thể đưa ra các lệnh tương ứng. Có thể sử dụng một lược đồ duy nhất để xác nhận hợp lệ nhiều cột XML trong nhiều bảng, nếu muốn.


Hỗ trợ quản trị

Sự hỗ trợ mới của DB2 cho XML bao gồm các phần mở rộng cho các công cụ và các tiện ích quen thuộc để giúp các quản trị viên quản lý và điều chỉnh cơ sở dữ liệu của họ. Ví dụ, các phương tiện sao lưu và khôi phục -- bao gồm sự sao chép dữ liệu có tính sẵn sàng cao cho các tình huống dự phòng lỗi -- tất cả các tài liệu hỗ trợ được lưu trữ trong các cột XML. Tương tự, bây giờ các phần mở rộng cho các phương tiện IMPORTEXPORT hoạt động trên cả hai dữ liệu SQL truyền thống và dữ liệu XML. Vì vậy, bạn có thể ban hành một lệnh IMPORT đơn để điền vào toàn bộ bảng "items" (đọc dữ liệu XML từ các tệp gốc) và ban hành một lệnh EXPORT đơn để viết tất cả dữ liệu của bảng vào các tệp bên ngoài. Trong DB2 9.5, người ta đã thêm các phần mở rộng vào phương tiện LOAD để bạn có thể nạp (LOAD) rất nhiều tài liệu XML.

Ngoài ra, công cụ quản trị đồ họa của DB2, Trung tâm điều khiển DB2, cũng như bản thay thế miễn phí của nó, IBM Data Studio, cho phép các quản trị viên duyệt các bảng có chứa dữ liệu XML, tạo và quản lý các chỉ mục dựa trên XML, ban hành các câu lệnh SQL/XML và XQuery và thực hiện một số nhiệm vụ quản trị khác. Do hiệu năng thường là một mối quan tâm chính, nên các phương tiện DB2 thích hợp cũng đã được mở rộng để cung cấp dữ liệu XML. Chúng bao gồm DB2 Snapshot Monitor (Giám sát ảnh chụp màn hình của DB2), cung cấp một bản tóm tắt đúng lúc hay "ảnh chụp màn hình" về các hoạt động của DB2; RUNSTATS, thu thập các số liệu thống kê về tính chất dữ liệu được lưu trữ trong một cơ sở dữ liệu DB2 và EXPLAIN (GIẢI THÍCH), ghi lại đường dẫn truy cập nào mà trình tối ưu hóa truy vấn đã chọn để đáp ứng một yêu cầu cụ thể. Việc xem xét đầu ra có thể cho phép một quản trị viên xác định các chỉ mục XML nào đang được sử dụng.


Các phần mở rộng của ngôn ngữ lập trình

Sự hỗ trợ XML mới của DB2 sẽ không có ích nhiều nếu các lập trình viên không dễ dàng truy cập vào XML được lưu trữ trong cơ sở dữ liệu của nó. Nhận ra được điều này, IBM đã triển khai thực hiện các cải tiến cho các giao diện ngôn ngữ lập trình khác nhau của mình để hỗ trợ truy cập dễ dàng vào dữ liệu XML của mình. Các cải tiến này bao trùm môi trường Java™ (JDBC), C (giao diện mức cuộc gọi và giao diện SQL nhúng), COBOL (SQL nhúng), PHP và và .NET của Microsoft® (thông qua nhà cung cấp .NET của DB2).

Vì giao diện lập trình ứng dụng (API) thay đổi theo ngôn ngữ lập trình đang sử dụng, nên bài viết này không xem xét từng phần mở rộng này ở đây. Tuy nhiên, bạn có thể đọc một bản tóm tắt về các phần mở rộng này trong một bài viết thảo luận có tên là "Sự hỗ trợ XML nguyên gốc trong cơ sở dữ liệu phổ biến của DB2" (xem phần "Tài nguyên") hoặc đọc bài "Sử dụng XML nguyên gốc của DB2 với PHP."


Hỗ trợ kho dữ liệu

Với việc phát hành DB2 9.7, sự hỗ trợ XML đã được mở rộng cho một môi trường kho dữ liệu. Bây giờ DPF (tính năng phân vùng dữ liệu) sẽ hoàn toàn hỗ trợ các cột XML. Hiện nay, việc này cho phép các hoạt động XML về phân tích cú pháp, chuyển hướng, chuyển đổi, tuần tự hóa và xây dựng chạy song song với các lợi ích hiệu năng. Lúc này, bạn có thể tạo ra hoặc thay đổi bất kỳ bảng nào để thêm một cột XML từ phân vùng bất kỳ, tạo các chỉ mục từ phân vùng bất kỳ, sử dụng các lệnh xác nhận hợp lệ XML, sử dụng SQL/XML hay XQuery, hoặc nạp khối lượng lớn dữ liệu XML song song. Khi bắt đầu với DB2 9.7, các bảng đã phân vùng có thể bao gồm dữ liệu XML và có thể hưởng lợi từ việc dịch chuyển vào và ra dữ liệu dễ dàng do các chức năng phân vùng bảng cung cấp. Ngoài các truy vấn trên dữ liệu quan hệ, các truy vấn trên dữ liệu XML cũng có thể hưởng lợi từ ưu thế về hiệu năng nhờ loại bỏ phân vùng.

Bây giờ các bảng phân cụm nhiều chiều (MDC) hỗ trợ dữ liệu XML. MDC cung cấp một phương pháp để phân cụm dữ liệu trong các bảng theo nhiều chiều. Các bảng MDC có thể cải thiện đáng kể hiệu năng truy vấn và giảm chi phí của các hoạt động bảo trì dữ liệu như sắp xếp lại dữ liệu, chèn dữ liệu và xóa dữ liệu. Bạn có thể tạo ra các bảng MDC có chứa một hoặc nhiều cột XML, thêm các cột XML vào các bảng MDC và tạo chỉ mục trên dữ liệu XML trong các bảng MDC. Các truy vấn có thể sử dụng cả các chỉ mục trên dữ liệu XML lẫn các chỉ mục MDC để nâng cao hiệu năng.

Tóm tắt

DB2 9 là sự thực hiện đầu tiên của IBM về một hệ thống quản lý cơ sở dữ liệu "lai" hay đa cấu trúc. Ngoài việc hỗ trợ một mô hình dữ liệu dạng bảng, DB2 còn hỗ trợ mô hình dữ liệu phân cấp nguyên gốc có trong các tài liệu và các thông báo XML. Những người dùng có thể tự do pha trộn và phối hợp lưu trữ dữ liệu SQL truyền thống và dữ liệu XML trong một bảng đơn. Họ cũng có thể truy vấn và tích hợp cả hai dạng dữ liệu khi sử dụng SQL (với phần mở rộng XML, nếu muốn) và XQuery, tiêu chuẩn mới nổi để truy vấn dữ liệu XML. Bằng cách xây dựng dựa vào một cơ sở hạ tầng quản lý cơ sở dữ liệu đã qua thử thách, IBM đang cung cấp cho những người sử dụng DB2 sự hỗ trợ tinh tế cho cả hai công nghệ DBMS XML quan hệ và nguyên gốc.

Lời cảm ơn

Cảm ơn Grant Hutchison, Matthias Nicola và Gary Robinson vì đã đóng góp ý kiến cho bài viết này.

Tài nguyên

Học tập

  • Trang web DB2 pureXML: Tìm hiểu thêm về sự hỗ trợ pureXML của DB2.
  • Wiki hỗ trợ DB2 pureXML: Đây là trang chủ có mọi thứ về pureXML. Tại đây bạn sẽ tìm thấy nhiều thể loại với các bài viết, các câu chuyện thành công, các đối tác pureXML, diễn đàn pureXML của chúng ta và trang web những người hâm mộ của chúng tôi cho những ai muốn theo kịp các diễn biến pureXML mới nhất. Hãy cập nhật các câu chuyện thành công, các bài báo, học hỏi kinh nghiệm mới nhất và nhiều hơn nữa về DB2 pureXML.
  • Trang web những người hâm mộ DB2 pureXML: Bạn có thể đăng ký để truy cập vào các trang người hâm mộ pureXML của chúng tôi và tham dự các phiên thảo luận do các chuyên gia và các khách hàng đưa ra để nghiên cứu sâu hơn nữa vào các hàm và các giải pháp pureXML.
  • Tiêu chuẩn W3C cho XML: Dữ liệu XML phải "đúng định dạng" -- nó phải tuân thủ các quy tắc cú pháp cụ thể được quy định trong tiêu chuẩn W3C cho XML -- để được lưu trữ trong DB2.
    • Các lược đồ XML: Cũng là một phần của tiêu chuẩn W3C XML, các lược đồ XML cung cấp một phương tiện để định nghĩa cấu trúc, nội dung và ngữ nghĩa của các tài liệu XML.
    • Tiêu chuẩn XQuery: XQuery là một ngôn ngữ truy vấn sử dụng cấu trúc thông minh của XML để thể hiện các truy vấn trên nhiều kiểu nguồn dữ liệu XML.
  • Hệ thống RX: Một phần là dữ liệu quan hệ, một phần là dữ liệu XML (Trang web hội nghị SIGMOD 2005): Do 14 nhà nghiên cứu và nhà phát triển của IBM viết, bài báo này mô tả toàn bộ các khía cạnh kiến trúc và thiết kế của một hệ thống cơ sở dữ liệu quan hệ lai và XML được gọi là hệ thống RX..
  • "Khai hỏa máy Hybrid"(IBM Database Magazine, Quý 3, 2005): Bản DB2 lai mới của IBM đưa vào toàn bộ sức mạnh của một máy quan hệ để làm việc trên một kho lưu trữ XML nguyên gốc tin cậy, đặt bên cạnh kho lưu trữ dữ liệu quan hệ của DB2.
  • "Cách tiếp cận của IBM về các cơ sở dữ liệu XML thống nhất/quan hệ" (IBM, 03.2005): Trang trắng này thảo luận cách IBM cung cấp một cơ sở dữ liệu quan hệ/XML thống nhất nguyên gốc tin cậy, hỗ trợ cho mô hình dữ liệu XML từ máy khách qua cơ sở dữ liệu xuống đĩa và ngược lại.
  • "Khái niệm cơ bản về DB2: Một giới thiệu về các hàm xuất bản SQL/XML" (developerWorks, 11. 2005): Bài viết này giới thiệu cho bạn về các hàm xuất bản SQL/XML và chỉ cho bạn, bằng cách làm theo các ví dụ, cách sử dụng các hàm này.
  • "Hỗ trợ XML nguyên gốc trong DB2 Universal Database" (Kỷ yếu của Hội nghị VLDB lần thứ 31, 2005) cung cấp một bản tóm tắt của các phần mở rộng ngôn ngữ lập trình.
  • "Quản lý XML để thu được nhiều nhất" (IBM, 11.2005): Tìm hiểu về các lợi ích nghiệp vụ của sự hỗ trợ XML của DB2 trong trang trắng này.
  • "Sử dụng XML nguyên gốc DB2 với PHP" (developerWorks, 10.2005): Tìm hiểu về tác dụng của việc sử dụng các khả năng XML nguyên gốc của DB2 UDB cho Linux, UNIX và Windows để đơn giản hóa mã ứng dụng và các lược đồ quan hệ.
  • Hướng dẫn XQuery: Tìm hiểu các nguyên tắc cơ bản của ngôn ngữ XQuery.
  • "XQuery từ các chuyên gia: Những ảnh hưởng do thiết kế của XQuery" (developerWorks, 09.2003): Don Chamberlin người đi đầu về XQuery riêng của IBM bàn về sự mới nổi của ngôn ngữ XQuery -- cụ thể, cần thiết cho một ngôn ngữ truy vấn dữ liệu XML và các nguyên tắc cơ bản đằng sau nó. Đoạn trích này trong Chương 2 của cuốn sách do Addison-Wesley phát hành XQuery từ các chuyên gia.
  • "Giới thiệu về XQuery" (developerWorks, 11.2005): Tìm hiểu về nguồn gốc ngôn ngữ và các tiêu chuẩn XML có liên quan. Howard Katz giới thiệu đặc tả W3C XQuery, hiện đang hướng đường đi của nó về phía trạng thái Khuyến nghị.
  • Theo sát với các sự kiện kỹ thuật và webcast của developerWorks.
  • Vùng Quản lý thông tin developerWorks: Tìm hiểu thêm về DB2. Tìm tài liệu kỹ thuật, các bài hướng dẫn, học hỏi kinh nghiệm, các bản tải về, thông tin sản phẩm và nhiều hơn nữa.
  • Tìm hiểu về DB2 Express-C, phiên bản miễn phí của Ấn bản DB2 Express cho cộng đồng.

Lấy sản phẩm và công nghệ

  • Xây dựng dự án phát triển tiếp theo của bạn bằng phần mềm dùng thử của IBM, có sẵn để tải trực tiếp từ developerWorks.
  • Bây giờ bạn có thể sử dụng DB2 miễn phí. Hãy tải về DB2 Express-C, một phiên bản miễn phí của Ấn bản DB2 Express cho cộng đồng, cung cấp các tính năng dữ liệu cốt lõi giống như Ấn bản DB2 Express và cung cấp một cơ sở vững chắc để xây dựng và triển khai các ứng dụng.

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Information Management
ArticleID=749746
ArticleTitle=Hãy khởi đầu nhanh chóng với DB2 9 pureXML, Phần 1: XML là lõi
publish-date=03112010