我正在编写一个C#应用程序来从网站上抓取数据,然后用它来更新数据库表。
我刮的数据与数据库中的10行有关。我们只想在数据实际发生变化时插入数据。我编写了SQL procs来进行更改,但我不确定如何实现第一阶段 - 检查程序生成的数据(从网站上删除)是否与SQL Server中已存储的数据不同。
我目前的方法是在我的程序中使用表示数据的类,填充这些对象的实例字典(在这种情况下会有10个键值对),填充网站数据然后抓取SQL表数据,遍历所有10行,再次使用我的类创建另外10个对象,然后使用我在名为getHash()的数据类中编写的函数比较两组字典对象,例如:
websitedict.get(key1).getHash() == dbdict.get(key1).getHash()
?
等
答案 0 :(得分:1)
你想在哪个方面取得最佳成绩?
SQL调用,CPU使用率,内存使用率,CPU和SQL服务器之间的带宽,最容易阅读,最容易维护等等......
对当前方法的一个内存改进是将dbdict设为Dictionary<keytype, int>()
并仅在其中存储GetHash()
值。
或者可能将GetHash()
值存储在数据库中,因此您可以执行以下操作:
update table1 set col1 = "newvalueCol1", col2 = "newvalueCol2", colHash = @newHash
where id = @key1
and colHash <> @newHash
除此之外,我觉得我需要了解更多情况以帮助更多(对你来说太慢了,例如:代码,架构,更新)
答案 1 :(得分:0)
如果第1行发生更改,为什么要处理10行。
Select count(*) from table1 where col1 <> "newVal1" or col2 <> "newVal2" ...
Select count(*) from table2 where col1 <> "newVal1" or col2 <> "newVal2" ...
在您提出插入数据的问题中,然后在评论中说明更新。
如果更新那么简单
更新table1 set col1 =“newvalueCol1”其中col1&lt;&gt; “newvalueCol1”
实际上会更有效率
update table1 set col1 = "newvalueCol1", col2 = "newvalueCol2"
where col1 <> "newvalueCol1"
or col2 <> "newvalueCol2"
如果只有一个已经更改,那么一旦锁定,则更新两者的开销非常小。