2008-10-14 46 views
89

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

Rõ ràng là tôi không "nhận" ở đây .. bất cứ ai có thể cho tôi ví dụ về các ứng dụng 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 không?

+1

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

+0

http://en.wikipedia.org/wiki/Xml_database –

+4

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

Trả lời

90

Để báo This Book (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ờ là có nghĩa là một cơ sở dữ liệu. Nó không bao giờ là sẽ là cơ sở dữ liệu. Các cơ sở dữ liệu quan hệ được chứng minh là công nghệ với hơn 20 năm thực hiện trải nghiệm. Chúng là các sản phẩm hữu ích, bền vững, ổn định, . Họ sẽ không đi . 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 giữa các cơ sở dữ liệu và khác nhau. Tuy nhiên, nó không phải là chính nó là một cơ sở dữ liệu. Không sử dụng nó như một. “

Tôi nghĩ rằng điều này tóm tắt, nếu một chút thẳng thừng. 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 một DOM với các biểu thức XPath nhưng điều đó không giống với một 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ô cho các tập dữ liệu lớn, bạn cần phải triển khai một công cụ DBMS và định dạng dữ liệu với các chỉ mục, ghi nhật ký và các tạo phẩm khác của DBMS. nó khác với XML.

+0

Tôi nhận ra 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 tin 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 hay không. SQL được thiết kế trong thời kỳ tối tăm khi không gian đĩa tốn kém, và nó trở thành một cách suy nghĩ trong ngành công nghiệp phần mềm. Điều đó không có nghĩa là nó đúng về các phương pháp hiện đại. – pfeds

+0

Điều đó vẫn không làm cho cơ sở dữ liệu XML trở thành một định dạng tuần tự hóa cho một thứ 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 cơ sở truy vấn đầy đủ tính năng. – ConcernedOfTunbridgeWells

+2

Việc 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 các độ dài trường và bản ghi cố định khiến chúng có thể phản hồi trong một thời gian liên tục cho bất kỳ yêu cầu nào trong khi các kho dữ liệu dựa trên văn bản XML, Yaml-, JSon và dựa trên văn bản khác, 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 máng trong đó có một chi phí rất lớn trong thời gian xử lý, và có thể được thực hiện trong khoảng thời gian không đáng kể. Điều này chỉ có thể được làm việc xung quanh với một tốn kém (trong điều khoản của thời gian CPU) prebuffering với yêu cầu bộ nhớ rất lớn. – mg30rg

20

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

Các liên kết sau đây không phải là xấu để mô tả khi sử dụng XML: Why should I use XML ?

+0

Tốt fan-out. +1 – ConcernedOfTunbridgeWells

+0

Cập nhật liên kết kể từ 2012-09-06: http://xml.silmaril.ie/index.html – wil

1

Bất cứ khi nào bạn không có sự sang trọng của việc có một cơ sở dữ liệu (nghĩ các ứng dụng người dùng duy nhất) hoặc cần một định dạng lưu trữ rất nhẹ.

Cũng như áp phích trước được đề cập, một định dạng trao đổi.

10

1) Khi bạn phải trao đổi dữ liệu của mình với người khác. XML là "lingua franca" của Web - mọi người đều có thể đọc và giải thích nó, không giống như 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ó. Các tệp XML là tốt cho những thứ như lưu trữ cấu hình hoặc các mẫu tài liệu.

3) Khi bạn không có nhiều nhà văn cố 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 làm việc đằng sau hậu trường cho bạn. cơ sở dữ liệu SQL có thể hỗ trợ chỉ số cho việc thu hồi các thông tin về dữ liệu lớn đặt ra một cách nhanh chóng ...

+0

Mod +1 cho "lingua franca" –

13

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

SQL phù hợp để lưu trữ & tìm kiếm. XML phù hợp để truyền tải định dạng &.

1

Cả XML và RDMS có thể được sử dụng làm kho dữ liệu, nhưng mỗi 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 ứng dụng web thường không phải là vấn đề lớn cho đến khi bạn bắt đầu xử lý lượng lớn dữ liệu hoặc bạn quyết định khám phá thông tin khác từ dữ liệu của mình (ví dụ: khai phá dữ liệu). Nói cách khác, việc lưu trữ một lượng lớn các tệp XML cho một nguồn dữ liệu không phải là khả năng mở rộng rất lớn nhưng nó giúp di chuyển dữ liệu 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ệ, có thể loại bỏ nhu cầu ORM nếu bạn có thể tuần tự hóa/deserialize các đối tượng của bạn trực tiếp từ các cơ sở dữ liệu XML. hỗ trợ đồng thời tốt 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 dễ dàng khai thác dữ liệu sau này. Cơ sở dữ liệu không bị trở ngại không phù hợp với đối tượng-quan hệ (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.

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.

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.

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 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 chúng tôi. Tất cả các đối tượng gửi cho nhau dữ liệu trong XSLT, vì vậy chỉ có một ngôn ngữ mà họ cần phải 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ó tới DB.

Bằng cách này bạn không có tạo chuỗi SQL được phân phối trên một tỷ đối tượng trong ứng dụng của bạn. Làm cho bảo trì dễ dàng hơn nhiều.

+0

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

+0

Tất cả những người liên lạc qua xe buýt dịch vụ. – Treb

+0

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 muốn? – Goran

1

Dưới đây là ví dụ về việc sử dụng XML với SQL: Người dùng được 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 Dữ liệu sử dụng 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à cứ thế. Một tá 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 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 tới cơ sở dữ liệu. Vì mỗi cơ sở dữ liệu có một cú pháp và lược đồ SQL hơi khác nhau, cần phải sử dụng SQL khác nhau cho mỗi cơ sở dữ liệu 12 cho cùng một hoạt động (SELECT, INSERT, 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 các câu lệnh SQL cho một trong số tá 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 đã chỉ định.

Cũng giố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 dừng hoặc biên dịch lại ứng dụng.

5

Những điều tôi sử dụng XML cho:

  • Kiên trì một hệ thống phân cấp đối tượng.
  • Di chuyển dữ liệu từ một quá trình hoặc máy khác.
  • Dữ liệu hiếm khi thay đổi, nếu có; cài đặt cấu hình và tương tự.
  • Khi đầu vào cho phép chuyển đổi XSLT: nói chung, nếu một trong các chương trình của tôi phát ra HTML, thì nó 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 tại một số
  • Đánh dấu văn bản. (Đừng quên điều đó!)

Không có nhiều sự trùng lặp 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. Một cách trớ trêu thay, nơi tôi đang sử dụng XML nặng nhất hiện tại là trong một ứng dụng máy tính để bàn xây dựng một bộ dữ liệu ADO trong bộ nhớ và sử dụng các phương thức WriteXml và ReadXml của DataSet để tiếp tục và truy xuất nó. Tôi đang sử dụng ADO vì nó dễ dàng hơn rất nhiều để tự động xây dựng một mô hình dữ liệu được xác định bởi metainformation sử dụng ADO hơn nó sẽ được thực hiện mô hình đối tượng của riêng tôi cho nhiệm vụ.

Vì vậy, đây là trường hợp mà trông 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 xảy ra để thực hiện rất 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 kiên trì của nó.

2

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

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

Các vấn đề liên quan