Khi nào tôi sử dụng XML thay vì SQL? [đóng cửa]


102

Tôi đã làm việc trên các ứng dụng web hướng cơ sở dữ liệu trong vài năm nay và gần đây đã tham gia một dự án liên quan đến CMS có khả năng hỗ trợ XML. Điều này đã khiến tôi suy nghĩ về việc sử dụng XML / XSLT nói chung và trong những tình huống nào thì nó sẽ hữu ích hơn cách tiếp cận mà tôi luôn sử dụng, đó là lưu trữ tất cả dữ liệu của tôi trong cơ sở dữ liệu SQL (của Tôi) và sau đó sử dụng PHP / Python / v.v. để làm việc với nó trên web khi cần thiết.

Rõ ràng là có điều gì đó tôi không "hiểu" ở đây .. bất cứ ai có thể cho tôi ví dụ về các ứng dụng mà lưu trữ dữ liệu trong tệp XML thay vì trong cơ sở dữ liệu sẽ thích hợp hơn?


4
Tôi nghĩ câu hỏi chính xác hơn là XML so với RDBMS, không phải so với SQL.
JAL


4
Tôi nghĩ câu hỏi chính xác hơn là FILE so với RDBMS, không phải XML và SQL.
pfeds

Nếu bạn có thời gian, cuốn sách "What Goes Around Comes Around" của Michael Stonebraker đoạt giải Turing gần đây là một bài báo xuất sắc về lịch sử cơ sở dữ liệu này, bao gồm cả cách cơ sở dữ liệu XML lặp lại những sai lầm trong quá khứ.
Jeffrey Bosboom

Câu trả lời:


100

Để trích dẫn Sách này (XML hiệu quả: 50 cách cụ thể để cải thiện XML của bạn):

“XML không phải là một cơ sở dữ liệu. Nó không bao giờ có nghĩa là một cơ sở dữ liệu. Nó sẽ không bao giờ trở thành một cơ sở dữ liệu. Cơ sở dữ liệu quan hệ là công nghệ đã được chứng minh với hơn 20 năm kinh nghiệm triển khai. Chúng là những sản phẩm chắc chắn, ổn định, hữu ích. Họ sẽ không biến mất. XML là một công nghệ rất hữu ích để di chuyển dữ liệu giữa các cơ sở dữ liệu khác nhau hoặc giữa cơ sở dữ liệu và các chương trình khác. Tuy nhiên, bản thân nó không phải là một cơ sở dữ liệu. Đừng sử dụng nó như một. "

Tôi nghĩ rằng điều này tổng kết nó, nếu một cách thẳng thắn. XML là một định dạng trao đổi dữ liệu. Người ta có thể có các thư viện phân tích cú pháp XML có thể truy vấn DOM với các biểu thức XPath nhưng điều đó không giống với DBMS. Bạn có thể xây dựng một DBMS với giao diện DOM / XPath nhưng để có được các thuộc tính ACID hoặc quy mô thành các tập dữ liệu lớn, bạn cần triển khai một công cụ DBMS và một định dạng dữ liệu với các chỉ mục, ghi nhật ký và các tạo tác khác của DBMS - mà (theo định nghĩa) tạo ra nó là một cái gì đó khác với XML.


1
Tôi nhận ra rằng câu trả lời này được viết vào năm 2008, nhưng với sự ra đời của một số hệ thống cơ sở dữ liệu dựa trên tệp, tôi thấy mình tự hỏi liệu chúng có ý nghĩa hơn RDBMS thông thường trong một số tình huống. SQL được thiết kế trong thời kỳ đen tối khi dung lượng ổ đĩa đắt đỏ và nó đã trở thành một lối suy nghĩ trong ngành công nghiệp phần mềm. Điều đó không có nghĩa là nó đúng về mặt phương pháp hiện đại.
pfeds

Điều đó vẫn không làm cho XML trở thành cơ sở dữ liệu, chỉ là một định dạng tuần tự hóa cho một thứ mà bạn đang lưu trữ trong BLOB. Điều này có thể hữu ích cho bạn nhưng nó không làm cho XML thay thế cho một phương tiện truy vấn đầy đủ tính năng.
ConcernedOfTunbridgeWells

2
Quản lý không gian đĩa hiệu quả hơn không phải là lợi thế duy nhất của cơ sở dữ liệu quan hệ. Hầu hết các cơ sở dữ liệu quan hệ đang làm việc với độ dài trường và bản ghi cố định, giúp chúng có thể phản hồi trong thời gian cố định cho bất kỳ yêu cầu nào trong khi các kho lưu trữ dữ liệu dựa trên văn bản và XML-, Yaml-, JSon- và các trường khác về cơ bản là dựa trên văn bản, vì vậy tất cả các truy vấn được thực hiện phân tích cú pháp văn bản thông thường có chi phí rất lớn về thời gian xử lý và có thể được thực hiện trong một khoảng thời gian không thể tin được. Điều này chỉ có thể được giải quyết với bộ đệm trước đắt tiền (về mặt thời gian CPU) với yêu cầu bộ nhớ lớn.
mg30rg,

Nếu tôi viết SQL SP để truy xuất dữ liệu và sử dụng HTML để hiển thị thay vì tệp XSLT, thì nó có nhanh hơn hay không?
SearchForKnowledge

ngày nay bạn có thể sử dụng XQuery cho cơ sở dữ liệu XML.
Don Dilanga

23

Sử dụng XML để tạo các tệp cần được gửi đến các ứng dụng khác. XML phù hợp hơn với tư cách là định dạng trao đổi dữ liệu hơn là định dạng lưu trữ dữ liệu.

Liên kết sau không tồi để mô tả khi sử dụng XML: Tại sao tôi nên sử dụng XML?


Link cập nhật lúc 2012/09/06: xml.silmaril.ie/index.html
WIP

14

SQL là dữ liệu dạng bảng tốt - dữ liệu dễ dàng phù hợp với các hàng & cột. XML rất tốt cho dữ liệu phân cấp - dữ liệu có nhiều cấp độ với kích thước khác nhau.

SQL tốt cho việc lưu trữ và tìm kiếm. XML tốt cho việc truyền và định dạng.


10

1) Khi bạn phải trao đổi dữ liệu của mình với người khác. XML là " ngôn ngữ chung " của Web - mọi người đều có thể đọc và diễn giải nó, không giống như một tệp cơ sở dữ liệu.

2) Khi khối lượng dữ liệu của bạn nhỏ và bạn không phải thực hiện các truy vấn phức tạp đối với nó. Tệp XML tốt cho những thứ như lưu trữ cấu hình hoặc mẫu tài liệu.

3) Khi bạn không có nhiều người viết đang cố gắng truy cập cùng một dữ liệu. Cơ sở dữ liệu SQL có liên quan đến các cơ chế đồng thời đang hoạt động đằng sau hậu trường cho bạn. Cơ sở dữ liệu SQL có thể hỗ trợ các chỉ mục để truy xuất thông tin trên các tập dữ liệu lớn một cách nhanh chóng ...


5

Những thứ tôi sử dụng XML cho:

  • Duy trì một hệ thống phân cấp đối tượng.
  • Di chuyển dữ liệu từ quá trình hoặc máy này sang máy khác.
  • Dữ liệu hiếm khi thay đổi, nếu có; cài đặt cấu hình và những thứ tương tự.
  • Khi đầu vào cho XSLT biến đổi: nói chung, nếu một trong các chương trình của tôi phát ra HTML, thì chương trình đó sẽ sử dụng XSLT để làm điều đó và do đó, dữ liệu nguồn sẽ được biểu diễn dưới dạng XML ở một số
  • Đánh dấu văn bản. (Đừng quên điều đó!)

Không có nhiều sự chồng chéo giữa các trường hợp sử dụng đó và các trường hợp sử dụng cho cơ sở dữ liệu. Một số, nhưng không nhiều.

Trớ trêu thay, nơi tôi đang sử dụng XML nhiều nhất vào lúc này là trong một ứng dụng dành cho máy tính để bàn tạo ADO DataSet trong bộ nhớ và sử dụng các phương thức WriteXml và ReadXml của DataSet để duy trì và truy xuất nó. Tôi đang sử dụng ADO vì việc xây dựng động một mô hình dữ liệu được xác định bởi siêu thông tin bằng ADO sẽ dễ dàng hơn rất nhiều so với việc triển khai mô hình đối tượng của riêng tôi cho nhiệm vụ.

Vì vậy, đây là một trường hợp có vẻ như tôi đang sử dụng XML làm cơ sở dữ liệu. Nhưng tôi thực sự không. Tôi đang sử dụng một mô hình đối tượng để triển khai nhiều chức năng giống như cơ sở dữ liệu và tôi đang sử dụng XML làm định dạng bền vững của nó.



2

Tôi tin rằng có khá nhiều ứng dụng thương mại sử dụng nhiều XML làm phương tiện lưu trữ. Tôi đã làm điều đó cho một ứng dụng lập kế hoạch dự án, nơi người dùng lưu trữ từng dự án trong tệp riêng của nó. Ứng dụng hoạt động trên thẻ USB và không cần cài đặt. Tất cả dữ liệu được lấy từ XML và hoạt động trên bộ nhớ, vì vậy getRecord (id) rất nhanh.

Vì vậy, câu trả lời của tôi sẽ là .. khi dữ liệu đủ nhỏ để được lưu giữ trong bộ nhớ, cơ sở dữ liệu sẽ bị giết.


1

Bất cứ khi nào bạn không có cơ sở dữ liệu (hãy nghĩ đến các ứng dụng người dùng đơn lẻ) hoặc cần một định dạng lưu trữ rất nhẹ.

Cũng như người đăng trước đã đề cập, một định dạng trao đổi.


1

Cả XML và RDMS đều có thể được sử dụng làm kho dữ liệu, nhưng mỗi cách triển khai đều có những ưu điểm và nhược điểm riêng.

Sử dụng XML để lưu trữ dữ liệu cho một ứng dụng web thường không phải là một vấn đề lớn cho đến khi bạn bắt đầu xử lý một lượng lớn dữ liệu hoặc bạn quyết định rằng bạn muốn khám phá thông tin khác từ dữ liệu của mình (ví dụ: khai thác dữ liệu). Nói cách khác, việc lưu trữ một lượng lớn tệp XML cho một nguồn dữ liệu không có khả năng mở rộng cao nhưng nó giúp cho việc di chuyển dữ liệu xung quanh dễ dàng hơn. XML cũng có thể được sử dụng để tuần tự hóa các đối tượng phức tạp theo định dạng không quan hệ, điều này có thể loại bỏ nhu cầu về ORM nếu bạn có thể tuần tự hóa / giải mã hóa các đối tượng của mình trực tiếp từ XML

RDMS (cơ sở dữ liệu) thường có khả năng mở rộng cao hơn, cung cấp hỗ trợ đồng thời cao hơn và nhanh hơn nhiều khi làm việc với lượng lớn dữ liệu. Mô hình quan hệ giúp việc khai thác dữ liệu sau này trở nên dễ dàng hơn. Cơ sở dữ liệu có trở kháng quan hệ đối tượng không khớp ( http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch ) có thể yêu cầu bạn viết mã xấu hoặc sử dụng ORM phức tạp.


1

Tôi sẽ đi nếu tôi có cơ sở dữ liệu mysql hạn chế trên máy chủ của mình, sau đó tôi sẽ thấy cơ hội sử dụng XML làm kho dữ liệu.


1

Dưới đây là một ví dụ về việc sử dụng XML với SQL: Người dùng đã xác thực đọc và ghi dữ liệu vào các cơ sở dữ liệu khác nhau, không phải tất cả đều là DBMS giống nhau. Người dùng cho Công ty A sử dụng dữ liệu từ cơ sở dữ liệu SQL Server cục bộ. Người dùng cho Công ty B sử dụng dữ liệu từ cơ sở dữ liệu Oracle từ xa. Và như thế. Hàng chục cơ sở dữ liệu khác nhau, mỗi cơ sở dữ liệu có các lược đồ hơi khác nhau cho cùng một dữ liệu cơ bản.

Nhà phát triển trang web không có khả năng tạo các thủ tục được lưu trữ trên cơ sở dữ liệu từ xa. SQL phải được gửi trực tiếp từ ứng dụng web đến cơ sở dữ liệu. Vì mỗi cơ sở dữ liệu có cú pháp và lược đồ SQL hơi khác nhau, nên cần sử dụng các SQL khác nhau cho từng cơ sở dữ liệu trong số 12 cơ sở dữ liệu cho cùng một hoạt động (CHỌN, CHÈN, v.v.).

Một trong những lựa chọn để nhúng các câu lệnh SQL trong ứng dụng web là đặt chúng trong các tệp XML. Mỗi tệp XML chứa tập hợp các câu lệnh SQL cho một trong hàng chục cơ sở dữ liệu. Mã xác định cơ sở dữ liệu nào được truy cập cho người dùng đã đăng nhập và truy xuất SQL thích hợp từ tệp XML được chỉ định.

Cũng như với các thủ tục được lưu trữ, SQL trong tệp XML có thể được cập nhật mà không cần dừng hoặc biên dịch lại ứng dụng.


0

Một số ứng dụng sử dụng tệp XML để lưu trữ cấu hình, tôi thích sử dụng SQLite để làm như vậy.


0

Tôi sẽ không bao giờ sử dụng bất kỳ loại XML nào để lưu trữ dữ liệu của mình.

Chúng tôi sử dụng các phép biến đổi XSLT làm lớp trừu tượng hóa dữ liệu trong ứng dụng SOA của mình. Tất cả các đối tượng gửi dữ liệu cho nhau trong XSLT, do đó, chỉ có một ngôn ngữ duy nhất mà chúng cần hiểu. Ngoại trừ trình kết nối cơ sở dữ liệu, cần có khả năng chuyển đổi dữ liệu thành SQL, để gửi nó đến DB.

Bằng cách này, bạn không có quá trình tạo chuỗi SQL được phân phối trên hàng triệu đối tượng trong ứng dụng của mình. Giúp cho việc bảo trì dễ dàng hơn nhiều.


"Tất cả các đối tượng gửi cho nhau dữ liệu trong XSLT," Nghiêm túc chứ?
Goran

Tất cả những người giao tiếp qua xe buýt dịch vụ.
Treb 14/10/08

XSLT là ngôn ngữ để chuyển đổi XML không mang thông tin. Tôi tưởng tượng bạn có thể sử dụng XSLT để gửi dữ liệu vì nó là một tập hợp con của XML nhưng tại sao bạn lại muốn?
Goran

Vâng, bạn nói đúng - Tôi cần phải nói lại điều đó.
Treb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.