Sync Framework与SQL DB:入门

时间:2010-08-09 20:12:12

标签: .net sql-server microsoft-sync-framework disconnected occasionallyconnected

我有一个使用SQL Enterprise的应用程序将所有数据存储在4个不同的数据库中。我需要建立为我的用户“离线”工作的能力。我通过Merge Replication为每个人安装了本地SQL Express安装程序。这个“作品”但感觉就像大锤的方法。

例如,当任何个人用户只与100左右进行交互时,我正在将所有14000个人复制到每个数据库。这甚至没有计算出它们在与中央数据库的连接之间永远不会与5个以上的交互。

我正在寻找的是提示,指针,以及可能是Sync Framework 2(带数据库)的精彩教程。第一手资料说明了什么对你有用,为什么也会受到欢迎。我还没有遇到过使用Sync Framework的简明扼要的(更不用说当前的)教程。

我的具体信息是MS SQL Server 2005或2008,任何版本。任何.Net版本(3.5或4)。当前数据层全部为LinqToSQL。目前正在使用任何Sprocs

到目前为止,我的想法是仅同步每个工作人员分配的案例量和相关数据。理想情况下,我们会直接选择“签入/签出”格式,选择他们计划访问的成员,然后同步必要的数据。

作为奖励,有人可以告诉我这被称为什么?我偶尔会遇到“偶尔连接”,但这似乎不准确。把它们称为“偶尔DIS连接”会更准确吗?

9 个答案:

答案 0 :(得分:3)

我们在几个项目中使用了Sync框架(一个使用sql server,一个使用PGsql),所以我可以说它工作得很好。

查看此演练应用程序,了解您可以执行的操作。

http://code.msdn.microsoft.com/sync/Release/ProjectReleases.aspx?ReleaseId=4835

这将向您展示如何在多个SQL Server数据库之间同步数据。您还可以自定义“增量”存储过程以获取自定义参数并根据这些参数过滤数据(例如客户端用户计划访问的人员)。

我还建议你使用反射器来反编译同步框架代码,以防你看到奇怪的错误 - 有时候你不可能弄清楚错误的位置,直到看到框架代码中的异常被捕获为止。 Redgate对我来说非常合适!

如果您需要更多帮助,请与我联系!

答案 1 :(得分:1)

我有一些建议和提示可能会或可能不会显而易见/有用。

对我而言,这听起来像是一个可以分为三个不同方面的问题:

同步过程

  • 您应该确保所有行都有某种“last_update”列,以便您的同步过程可以高效可靠地确定哪些数据已经是最新的 - 这样您就可以更加积极地使用该数字正在同步的记录数。
  • 我会避免使用复杂的同步过程,并尽可能简单地使用强力方法。 14,000条记录对我来说听起来不那么多 - 通过优化,您可能会发现可以在合理的时间内同步连接之间的所有更改。如果没有,那么我仍然可能对你同步的内容非常自由,以避免用户在没有意识到的情况下使用过时的数据。

推送在离线模式下进行的更改

如果可能的话,我可能只是简单地禁止在离线模式下进行更改 - 这是不可能的,那么你应该考虑将更改作为一个单独的(并且可能) 相当复杂的过程本身就是一个过程。

由于同步过程非常依赖于业务,因此在不了解应用程序的情况下很难提出好的建议,但有些事情需要考虑:

  • 用户是否可以锁定(或检出)某个项目,以防止其他人在脱机工作时更改该项目?
  • 锁定是否可以覆盖?
  • 如果锁定被覆盖,当有人试图保存更改时会发生什么(合并过程似乎是明智的选择)
  • 是否有人能够编辑他们没有签出的项目?

如果您决定实施复杂的离线更改流程,那么您可能需要查看常见分布式VCS中使用的工作流程以获取灵感。

更改离线数据存储

您可能会发现使用SQL CompactSQLite作为本地数据存储更优雅的解决方案(它肯定会使安装过程更容易),如果您使用的是LINQ,那么我可能会在支持SQL Compact,因为它肯定有LINQ to SQL支持。

我将首先关注上述两项,因为此更改在最终用户改进方面提供的最少,并且可能是最多的工作 - 上述两项完全可以实现,同时仍然使用SQL Server Express作为本地数据存储。 / p>

答案 2 :(得分:1)

http://code.msdn.microsoft.com/sync/Release/ProjectReleases.aspx?ReleaseId=3422 这是一个很好的演练,使用SQL Server CE应该非常适合您要做的事情并且占用空间小得多。在我看来,你失去的功能并没有妨碍你至少要做的事情。

答案 3 :(得分:0)

这基本上称为Distributed Computing

在我所使用的任何此类系统中,我通常使用N-Tier Architecture来允许偶尔将客户端程序连接到后端的数据库服务器以进行CRUD操作。客户端所做的任何工作都被认为是无连接的,因为它们在保存更改之前不会与服务器交互。

使用这种方法,您应该能够创建一个应用程序,允许它们连接片刻以获取一些数据,对数据执行一些工作,然后将任何更改(CRUD)传播到服务器(数据库)。

我不得不说使用Merge复制与本地Sql Express安装肯定是一个大锤方法。不要觉得太糟糕,我们都会不时地这样做:P。

修改

我自己没有使用过Sync Framework,但看起来不错。查看Sync Framework Developer Center以获取更多相关信息。

答案 4 :(得分:0)

听起来像Microsoft Sync可能是一个不错的选择。这里概述了同步数据库http://msdn.microsoft.com/en-us/sync/bb887608.aspx。看看它,看看它是否符合您的需求。这听起来像是解决问题的完美方案。

答案 5 :(得分:0)

问题是,您的应用是否需要在设备上运行本地存储的断开连接的数据,或者您是否可以创建Web前端的移动版本,因为它们在工作时始终需要连接到服务器有数据?

我工作的项目(很久以前)使用了紧凑的框架和activesync与Access或SQL Server后端,因为每个设备一直连接太昂贵,就像电话一样。他们将设备带到现场,需要从断开连接的数据库访问数据,执行他们的mod,并在他们回到办公室时同步。

如果您正在做的事情,您可以使用他们的deviceID来确定每个设备需要哪些案例/行,但如果您正在考虑开发自定义同步解决方案,我认为您正在打错战。那已经完成了。使用经过验证的同步解决方案,限制和所有,并专注于可用于限制同步数据的标准。

答案 6 :(得分:0)

您似乎需要对合并数据选项有更多控制权。有了这个要求,我可以看到有两种类型的数据;属于成员的数据(案例属于成员)和共享数据(参考,主数据)。

在这种情况下,我会混合使用这些技术来快速制作。

例如,Master和Reference数据更改不常见。因此,我们不需要经常同步,但需要对变更进行控制,并且应该/必须在中心位置进行。在这种情况下,我会在我的中央数据库上进行更改并使用大锤方法。

对于交易数据,假设一次性,在这种情况下,成员只能更改属于他/她的案例/行,可以使用多种方式实现。

如上所述,您可以使用Sync Framework Developer Center或ActiveSync。

由于阈值不像PDA或掌上电脑那样严格,我们也可以试用手动方法,因为我们有笔记本电脑。实现一个功能/流程例程来连接和推送创建,更新和删除的数据(在这种情况下,我们必须在数据库级别维护一个标志),使用BulkCopy Operations是这种情况下最常用的方法(需要提供一个按钮)供会员点击和调用,或服务轮询并检查连接并自动启动同步例程。

/ KP

答案 7 :(得分:0)

经过多天与同步框架的斗争,我正在考虑放弃它,只是编写一些简单的WCF服务和代码。我的要求非常简单,从SQL2008到移动设备上的SQL CE的单向同步。根据我的经验,很难定制(仅同步某些字段等)并且非常慢且效率低。我认为微软需要做更多的工作才能让它更容易使用。

干杯

标记

答案 8 :(得分:0)

您是否曾尝试过滤行级别的合并复制文章?这会将您的14k行大小减少到可管理的范围。