2011-08-10 4 views
10

サービスからXMLデータを受信して​​います。私が受け取っているテストデータには約300のXMLノードがあります。明らかにMySQLデータベースの個々の行を作成するにはあまりにも多くなります。いくつかの特定の要件を持つMySQLデータベースにXMLデータを格納するための最良の方法

すべてのデータを保存することが理想的ですが、将来、データを再度参照する必要があります。一度処理してXML文字列を削除することはできません。

このデータをMySQLデータベースに保存する最良の方法は何ですか?

数か月以内に予測される率で、元のXMLデータをTEXT形式で保存すると、データベースは約500MBに拡大する可能性があります。長期的には、これは実用的ではないと感じている。

答えて

14

blob列(つまりmediumtext列)を作成できます。 XMLに純粋に文字列としてXMLを挿入するのではなく、XMLを圧縮してMySQLに格納することができます。

あなたがMySQLから読むとき、あなたは再びそれを解凍します。 XMLはテキストなので、非常に高い圧縮率(80%に近い圧縮率)が得られます。考えられるプロセスは、ディスクI/Oは、主にプロセッサにバインドされた圧縮/非圧縮よりもかなり長い時間がかかります。

あなたは、もはやSQLを使用して、フルテキスト検索を照会したり、やることはできないだろうという欠点....

+0

ありがとう@Srikar、このソリューションは自分の要件に完全に一致しています。私は、XML文書を将来の参照のためにDBに格納する必要があります。格納されたXML文書に対してクエリは作成されません。私の唯一の懸念は、時間の経過とともに、XMLファイルを格納するストレージ要件が劇的に増加する可能性があります。そのために、DBに保存する前にファイルを圧縮します。 – Anuruddha

2

XMLをデータベースに保存しないことが最善の方法ですが、その特定の問題の履歴があります。

そのままTEXTとして保存してください。 500 MBはMySqlでは何もありません。特にTEXTデータ型では、行バッファに格納されないためです。

4

LOAD XMLコマンドを使用してみてください。この文はMySQL 5.5で利用可能です。

3

多くのことはデータで何をしたいのかによって変わります。XML内のものを検索する場合は、decomposing it into a treeを使用すると、より優れたクエリのパフォーマンスが得られます。

500Mbは膨大なデータではありません。問題はすべてあなたの参照方法と検索方法に関するものです。アーカイブ目的のみである場合や、XML内で検索する必要がない場合は、base64エンコーディングなどで圧縮すると80Mb未満になります。

関連する問題