【问题标题】:What is the fastest way to sync a database using C#?使用 C# 同步数据库的最快方法是什么?
【发布时间】:2012-05-29 21:00:35
【问题描述】:

我有一个问题,很明显,因为我在这里......

我有一个源数据库(SQL Server 2008)和一个目标数据库(也是 SQL Server 2008)。需要进行一些修改,这意味着很多数据必须通过 C#(转换坐标、三角测量等)。但是你会怎么做呢?

我在这里寻找一些东西。现在我正在使用SqlDataReader 并将数据拉入DataTable 并使用类似的数据以便在我将其推送到目标数据库之前对其进行操作,但是什么会更好(更快和更多内存高效)的方式?

另外,对于不需要操作的数据,我仍然以同样的方式处理它,我认为有一种方法可以避免更快?

技术信息:

  • 数据库:2 x SQL Server 2008(源/目标)- 在同一台服务器上
  • 语言:C#/.NET 3.5
  • 操作系统:Windows

【问题讨论】:

  • 如果您只是一次读取和写入一条记录,那么数据表似乎有点重量级,除非您将其用作缓冲区。
  • 每条记录的数据转换是确定性的,还是一条记录的更改会影响其他记录?
  • 你能用SQLCLR在数据库本身做处理吗? msdn.microsoft.com/en-us/library/ms131045.aspx
  • Robert - 目前没有将其用作缓冲区,因为没有必要,但据我所知,它可能需要处理超过 100 行轧机,因此我将其放置到位我可以将它用作缓冲区..
  • Mathew - 我不是 100% 确定你的意思。基本上,我从一个表中获取记录,将其与另一个表中的记录匹配,然后将它们放在一个包含额外信息的新表中。这是一种 hacky 的连接方式,因为在这种情况下连接不起作用(除非你告诉我它会!)。一旦记录配对,它就不能再次与不同的记录配对,我猜它们会相互影响......

标签: c# sql sql-server datatable synchronization


【解决方案1】:

我会将源数据插入到目标数据库的临时表中。

然后我会使用 SQL Merge 来更新目的地。

MERGE (Transact-SQL)

我会完全减少 c# 所扮演的角色。

【讨论】:

  • 这是有道理的。我的意思是 C# 确实需要为某些表做一些工作。但是我可以将它用于不需要修改的表! :)
【解决方案2】:

您可以使用SQL CLR 将 .NET 代码嵌入到 sql server 中,以消除数据库和机器之间的往返时间。

【讨论】:

  • 我可以使用 SQLCLR,我正在将它用于我正在做的其他事情。但是这其中耗时的部分是配对,一旦 C# 有了它,确实需要一些时间来梳理所有记录并修改它们,但我的主要问题是我是否可以改进这个特定部分。我尽量避免使用 SQLCLR,除非有一个巨大的改进,因为调试是一场噩梦!
【解决方案3】:

对于 ETL 任务,您应该使用 Integration Services

【讨论】:

  • 我会再研究一下,但我不确定我是否有时间来实现它。它需要由用户操作触发,我知道集成服务可以这样做,但我对它们不太熟悉,而且我不确定我是否可以实施足够好的解决方案来保证丢失时间。除非你认为这真的很容易并且愿意给我一个拥有;-)
猜你喜欢
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 2017-09-26
相关资源
最近更新 更多