1

お客様の1人は、ERPシステムに対して同期を実行するWebショップを持っています。彼らの倉庫はウェブショップと実店舗の両方にサービスを提供しているため、ウェブショップで入手できない商品を販売したくないため、ウェブショップの各商品の手持ち数量を頻繁に更新することが重要です。倉庫。

これは現在、次の方法で解決されています
。5分ごとにXMLファイルがERPシステムからWebショップに投稿されます。ファイルは次のようになります。

<products>
  <product>
    <productID>1</productID>
    <stock>20</stock>
  </product>
  <product>
    <productID>2</productID>
    <stock>3</stock>
  </product>
</products>

XMLには、製品の手持ち数量が変更されたかどうかに関係なく、データベース内の数千の製品すべてが含まれています。ERPプロバイダーによると、これを変更された製品のみに減らすことはオプションではないため、私たちの側で処理する必要があります。

次に、WebショップはXMLファイルを処理し、データベース内のすべての製品の手持ちの数量を、更新ごとに個別のトランザクションで更新します。ご存知かもしれませんが、これは不必要に遅く、リソースを大量に消費します。データベースには何千もの製品が含まれており、ほとんどの場合、実際に在庫数を変更した製品はないか、ごくわずかです。

したがって、これを行う最善の方法は、すべての製品のデータベースからproductIDと在庫を選択し、結果をXMLと比較し、データベース内の在庫がXMLファイルのストック。

私の質問は、XMLをデータベースの結果と比較するための最速の方法は何でしょうか?XMLをメモリに読み込み、データベースから結果セットをループしてから、XMLでXPathを使用して、各製品から株価を取得しますか?最初にXMLを辞書に変換し、次にそれをルックアップに使用しますか?

すべての助けを事前に感謝します。

4

2 に答える 2

1

ファイルの不要なインポートを回避する 1 つの方法は、ファイルからハッシュ コードを生成することです。次回インポートする前に、再度ハッシュ コードを生成して古いものと比較し、それらが同じ場合は何もインポートしません。

using(var stream = File.OpenRead("C:\\temp\\file.xml"))
using(var sha = new SHA1Managed())
{
    var hashCode = sha.ComputeHash(stream);
}

ハッシュが一致しない場合は、データベースをディクショナリに読み込み、XML ファイルを解析するときにそれと比較します。それに応じてデータベースを更新します。辞書を更新して、次にインポートする必要があるときまで(おそらく静的変数に)保持することもできます。そうすれば、データベースから常に入力する必要がなくなります。

于 2012-06-06T11:09:43.167 に答える