SQLの代わりにXMLを使用するのはいつですか?[閉まっている]


102

私は数年前からデータベース駆動型のWebアプリケーションに取り組んでおり、最近ではXML対応のCMSを含むプロジェクトに取り組んでいます。これにより、XML / XSLTの一般的な使用法と、どのような状況で(My)SQLデータベースにすべてのデータを格納してから使用するという、いつも使用していたアプローチよりも役立つと思いました。 PHP / Python /その他。必要に応じてWeb上で作業します。

私がここで「取得」していないことは明らかにあります。データベースではなくXMLファイルにデータを格納することが望ましいアプリケーションの例を誰かに教えてもらえますか?


4
問題は、SQLではなく、XMLよりもRDBMSのほうが正確だと思います。
JAL


4
質問は、XML対SQLではなく、RDBMS対FILEの方が正確だと思います。
2013

時間があれば、最近のチューリング賞を受賞したMichael Stonebrakerの「What Goes Around Comes Arounds」は、XMLデータベースが過去の過ちを繰り返した方法など、このデータベースの歴史に関する優れた論文です。
Jeffrey Bosboom 2015年

回答:


100

この本を引用するには(効果的なXML:XMLを改善するための50の方法):

「XMLはデータベースではありません。データベースであることを意図したものではありません。データベースになることは決してありません。リレーショナルデータベースは、20年以上の実装経験を持つ実績のあるテクノロジーです。彼らは固体、安定した、有用な製品です。彼らは消えません。XMLは、異なるデータベース間、またはデータベースと他のプログラム間でデータを移動するための非常に便利なテクノロジーです。ただし、それ自体はデータベースではありません。1つのように使用しないでください。」

少し率直に言えば、これで要約すると思います。XMLはデータ交換フォーマットです。XPath式を使用してDOMをクエリできるXML解析ライブラリを使用できますが、DBMSとは異なります。DOM / XPathインターフェースを使用してDBMSを構築できますが、ACIDプロパティを取得したり、大きなデータセットにスケーリングしたりするには、DBMSエンジンと、DBMSのインデックス、ロギング、その他のアーティファクトを含むデータフォーマットを実装する必要があります。 XML以外の何か。


1
この回答は2008年に書かれたものだと思いますが、多くのファイルベースのデータベースシステムの出現により、さまざまな状況で従来のRDBMSよりも意味があるかどうか疑問に思っています。SQLは、ディスクスペースが高価な暗黒時代に設計されたものであり、ソフトウェア業界での考え方の1つになっています。それはそれが現代の方法の点で正しいという意味ではありません。
pfeds 2013

それでもXMLがデータベースになるわけではなく、BLOBに格納するもののシリアル化形式だけです。これはあなたにとっては便利かもしれませんが、XMLがフル機能のクエリ機能の代わりになるわけではありません。
ConcernedOfTunbridgeWells 2013

2
より効率的なディスク領域管理は、リレーショナルデータベースの唯一の利点ではありません。ほとんどのリレーショナルデータベースは固定のフィールド長とレコード長で動作しているため、XML、Yaml、JSonなどのテキストベースのデータストレージは基本的にテキストベースであり、すべてのリクエストに一定の時間で応答できます。クエリは、プロセッサ時間に大きなオーバーヘッドがあり、予測できない時間で実行できるテキスト解析を通じて実行されます。これは、(CPU時間の点で)高価なプリバッファリングと巨大なメモリ要件でのみ回避できます。
mg30rg 2013年

SQL SPを記述してデータを取得し、XSLTファイルの代わりにHTMLを使用して表示する場合、それはより高速ですか、それともほぼ同じですか?
SearchForKnowledge 2014年

今日では、XMLデータベースにXQueryを使用できます。
Don Dilanga


14

SQLは優れた表形式のデータ、つまり行と列に簡単に収まるデータです。XMLは階層データ(サイズの異なる複数のレベルを持つデータ)に適しています。

SQLは保存と検索に適しています。XMLは送信とフォーマットに適しています。


10

1)他の人とデータを交換する必要がある場合。XMLはWeb の「共通言語」です。データベースファイルとは異なり、ほとんどすべての人がXML を読んで解釈できます。

2)データ量が少なく、複雑なクエリを実行する必要がない場合。XMLファイルは、構成やドキュメントテンプレートの保存などに適しています。

3)同じデータにアクセスしようとするライターが少ない場合。SQLデータベースには、バックグラウンドで動作する同時実行メカニズムが含まれています。SQLデータベースは、大規模なデータセットの情報をすばやく取得するためのインデックスをサポートできます...


5

私がXMLを使用するもの:

  • オブジェクト階層を永続化します。
  • プロセスまたはマシン間でデータを移動する。
  • まれにしか変化しないデータ。構成設定など。
  • XSLTへの入力が変換されると、一般的に言えば、私のプログラムの1つがHTMLを出力する場合、XSLTを使用してHTMLを生成しているため、ソースデータはXMLとして表現されます。
  • テキストマークアップ。(忘れないでください!)

これらのユースケースとデータベースのユースケースの間には、それほど多くの重複はありません。一部ではあるが、多くはない。

皮肉なことに、現時点でXMLを最も頻繁に使用しているのは、メモリ内ADO DataSetを構築し、DataSetのWriteXmlメソッドとReadXmlメソッドを使用して永続化および取得するデスクトップアプリです。タスクに独自のオブジェクトモデルを実装するよりも、ADOを使用してメタ情報によって定義されたデータモデルを動的に構築する方がはるかに簡単なので、ADOを使用しています。

つまり、XMLをデータベースとして使用しているようなケースです。しかし、私は本当にそうではありません。私はたまたまデータベースのような多くの機能を実装するオブジェクトモデルを使用しており、永続化形式としてXMLを使用しています。



2

記憶媒体としてXMLを多用する商用アプリケーションはかなりあると思います。私は、ユーザーが各プロジェクトを独自のファイルに保存するプロジェクト計画アプリケーションでそれを実行しました。アプリはUSBスティック上にあり、インストールは不要です。すべてのデータはXMLから取得され、メモリ内で処理されるため、getRecord(id)は非常に高速です。

だから私の答えは..データがメモリに保持されるのに十分小さい場合、データベースは過剰に殺害されます。


1

データベースを用意する余裕がない(シングルユーザーアプリケーションを考える)か、非常に軽量なストレージフォーマットが必要な場合はいつでも。

また、前のポスターで述べたように、交換形式です。


1

XMLとRDMSの両方をデータストアとして使用できますが、各実装には独自の利点と欠点があります。

XMLを使用してWebアプリケーションのデータを格納することは、通常、大量のデータの処理を開始するか、データから他の情報を検出することを決定するまでは大きな問題ではありません(例:データマイニング)。言い換えると、データソース用に大量のXMLファイルを保存することはあまりスケーラブルではありませんが、データの移動が容易になります。XMLを使用して、非リレーショナル形式で複雑なオブジェクトをシリアル化することもできます。これにより、XMLから直接オブジェクトをシリアル化/逆シリアル化できる場合、ORMの必要性を排除できます。

RDMS(データベース)は通常、よりスケーラブルであり、より多くの同時実行サポートを提供し、大量のデータを処理するときにはるかに高速です。リレーショナルモデルは、後でデータマイニングを容易にします。データベースには、オブジェクトリレーショナルインピーダンスの不一致(http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch)があり、醜いコードを記述したり、複雑なORMを使用したりする必要があります。


1

私のホストでmysqlデータベースを制限している場合は、XMLをデータストアとして使用する可能性があると思います。


1

SQLでXMLを使用する例を次に示します。認証されたユーザーは、すべてが同じDBMSではないさまざまなデータベースに対してデータの読み取りと書き込みを行います。A社のユーザーは、ローカルSQL Serverデータベースのデータを使用します。B社のユーザーは、リモートOracleデータベースのデータを使用します。等々。同じ基本データに対してそれぞれわずかに異なるスキーマを持つ12の異なるデータベース。

Webサイトの開発者は、リモートデータベースにストアドプロシージャを作成することができません。SQLは、Webアプリからデータベースに直接送信する必要があります。各データベースにはわずかに異なるSQL構文とスキーマがあるため、同じ操作(SELECT、INSERTなど)の12のデータベースごとに異なるSQLを使用する必要があります。

SQLステートメントをWebアプリに埋め込むための選択肢の1つは、SQLステートメントをXMLファイルに配置することです。各XMLファイルには、1ダースのデータベースの1つに対する一連のSQLステートメントが含まれています。このコードは、ログインしているユーザーがアクセスするデータベースを決定し、指定したXMLファイルから適切なSQLを取得します。

ストアドプロシージャと同様に、アプリケーションを停止または再コンパイルすることなく、XMLファイル内のSQLを更新できます。


0

一部のアプリケーションはXMLファイルを使用して構成を保存しますが、SQLiteを使用して保存します。


0

私はデータを保存するためにどのような種類のXML 使用しません。

XALT変換をSOAアプリのデータ抽象化レイヤーとして使用します。すべてのオブジェクトはXSLTで相互にデータを送信するため、理解する必要がある言語は1つだけです。データをDBに送信するためにデータをSQLに変換できる必要があるデータベースコネクタを除きます。

このようにして、アプリ内の膨大な数のオブジェクトにSQL文字列生成を分散させる必要がなくなります。メンテナンスがはるかに簡単になります。


「すべてのオブジェクトはXSLTで相互にデータを送信します」真剣に?
ゴラン、

サービスバスを介して通信するすべての人。
Treb

XSLTは、情報を持たないようにXMLを変換するための言語です。XSLTを使用してXMLのサブセットであるため、データを送信できると思いますが、なぜそうしたいのでしょうか。
ゴラン

はい、そうです。言い換える必要があります。
Treb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.