2

1) 巨大な ( 700MB
~ 1000 万要素) XML ファイルを読み込みます。2)順序を維持し
て解析します。 3)SQL挿入ステートメントを含むテキスト(1つ以上)ファイルを作成して、DBに一括ロードします。 4) リレーショナル タプルを記述し、それらを XML に書き戻します。

私はこれを行うための最良の (== 高速高速高速...) 方法についていくつかのアイデアを交換するためにここにいます。C# 4.0 と SQL Server 2008 を使用します。

XmlTextReader は良いスタートだと思います。しかし、そのような巨大なファイルを処理できるかどうかはわかりません。インスタンス化されたときにすべてのファイルをロードしますか、それとも実際の読み取り行だけをメモリに保持しますか? 私はできると思います、while(reader.Read())そしてそれはうまくいくはずです。

テキストファイルを作成する最良の方法は何ですか? XML の順序を保持する必要があるため (いくつかの番号付けスキーマを採用)、計算などを行うためにツリーの一部をメモリに保持する必要があります... stringbuilder で反復する必要がありますか?

2 つのシナリオがあります。1 つはすべてのノード (要素、属性、またはテキスト) が同じテーブルにある (つまり、同じオブジェクトになる) シナリオで、もう 1 つはノードの各タイプ (この 3 つのタイプのみ、コメントがないなど) のシナリオです。 ..) DB にテーブルを作成し、このエンティティを表すクラスを作成します。

私の最後の具体的な質問は、 DataSet がどれほど優れているかということds.WriteXmlです。10M タプルを処理できますか? データベースからチャンクを取得して XmlWriter を使用するのが最善の方法かもしれません...本当にわかりません。

私はこれらすべてをテストしています...しかし、皆さんの話を聞くためにこの質問を投稿することにしました。

前もって感謝します、

ペドロ・デュッソ

4

2 に答える 2

5

これにはSQLXML Bulk Load Componentを使用します。リレーショナル モデルへの埋め込みマッピングを使用して、XML 用に特別に注釈を付けた XSD スキーマを提供します。その後、XML データを非常に高速に一括読み込みできます。

XML にスキーマがない場合は、ファイルを読み込んで XML メニューから [スキーマの作成] を選択することで、Visual Studio からスキーマを作成できます。ただし、自分でリレーショナル モデルにマッピングを追加する必要があります。このブログには、その方法に関するいくつかの投稿があります。

于 2010-09-16T20:33:53.510 に答える
1

何だと思う?SQLServerの問題はありません。XMLに問題があります!

あなたの状況に直面して、私は躊躇しません。Perlとその多くのXMLモジュールの1つを使用して、データを解析し、単純なタブ区切りファイルまたはその他の区切りファイルを作成して一括読み込みし、結果のファイルをbcpします。

サーバーを使用してXMLを解析することには、多くの欠点があります。

  1. 速くはない、おそらく
  2. 私の経験では、積極的に役に立たないエラーメッセージ
  3. デバッガーなし
  4. 上記のいずれかが当てはまる場合、どこにも向きを変えることはできません

一方、Perlを使用する場合は、行ごとの処理とデバッグ、プログラマーをガイドすることを目的としたエラーメッセージ、およびパッケージの最初の選択で機能しないことが判明した場合の多くの選択肢があります。

この種の作業を頻繁に行い、Perlを知らない場合は、それを学んでください。それは何度もあなたに返済します。

于 2010-09-18T22:50:31.393 に答える