0

Webサイトからデータを取得し、それを使用してデータベーステーブルを更新するC#アプリケーションを作成しています。

私がスクレイプしたデータは、たとえばデータベースの10行に関連しています。データが実際に変更された場合にのみ、データを挿入します。変更を加えるためにSQLプロシージャを作成しましたが、最初の段階を実装する方法がわかりません。プログラムで生成されたデータ(Webサイトから取得)がSQLServerに既に保存されているデータと異なるかどうかを確認します。

私の現在のアプローチは、データを表すクラスをプログラムで使用し、これらのオブジェクトのインスタンスの辞書にデータを入力し(この場合、10個のキーと値のペアがあります)、Webサイトのデータを入力してから、SQLテーブルを取得することでした。データ、10行すべてを繰り返し、クラスを再度使用して別の10個のオブジェクトを作成し、getHash()というデータクラスで記述した関数を使用して2セットの辞書オブジェクトを比較します。例:

しますかwebsitedict.get(key1).getHash() == dbdict.get(key1).getHash()

4

2 に答える 2

1

どのような側面で最善を尽くそうとしていますか?

SQL呼び出し、CPU使用率、メモリ使用量、CPUとSQLサーバー間の帯域幅、読みやすく、保守しやすいなど...

現在のアプローチに対するメモリの改善の1つは、dbdictを使用して、値 Dictionary<keytype, int>()のみを格納することです。GetHash()

または、値をデータベースに保存してGetHash()、次のようにすることもできます。

update table1 set col1 = "newvalueCol1", col2 = "newvalueCol2", colHash = @newHash
where id = @key1
   and colHash <> @newHash

それ以外に、私はもっと助けるために状況についてもっと知る必要があると感じています(あなたにとって遅すぎるもの、例:コード、スキーマ、更新)

于 2012-11-15T23:35:08.640 に答える
0

行1に変更がある場合、なぜ10行を処理するのですか。

Select count(*) from table1 where col1 <> "newVal1" or col2 <> "newVal2"  ...

Select count(*) from table2 where col1 <> "newVal1" or col2 <> "newVal2"  ...

質問ではデータの挿入を述べていますが、コメントでは更新を述べています。

更新する場合は簡単

table1を更新setcol1= "newvalueCol1" where col1 <> "newvalueCol1"

実際にはもっと効率的です

update table1 set col1 = "newvalueCol1", col2 = "newvalueCol2" 
where col1 <> "newvalueCol1"
   or col2 <> "newvalueCol2"

片方だけが変更された場合にロックを取得すると、両方を更新するためのオーバーヘッドはほとんどありません。

于 2012-11-15T14:24:53.137 に答える