我有一个使用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连接”会更准确吗?
答案 0 :(得分:3)
我们在几个项目中使用了Sync框架(一个使用sql server,一个使用PGsql),所以我可以说它工作得很好。
查看此演练应用程序,了解您可以执行的操作。
http://code.msdn.microsoft.com/sync/Release/ProjectReleases.aspx?ReleaseId=4835
这将向您展示如何在多个SQL Server数据库之间同步数据。您还可以自定义“增量”存储过程以获取自定义参数并根据这些参数过滤数据(例如客户端用户计划访问的人员)。
我还建议你使用反射器来反编译同步框架代码,以防你看到奇怪的错误 - 有时候你不可能弄清楚错误的位置,直到看到框架代码中的异常被捕获为止。 Redgate对我来说非常合适!
如果您需要更多帮助,请与我联系!
答案 1 :(得分:1)
我有一些建议和提示可能会或可能不会显而易见/有用。
对我而言,这听起来像是一个可以分为三个不同方面的问题:
同步过程
推送在离线模式下进行的更改
如果可能的话,我可能只是简单地禁止在离线模式下进行更改 - 这是不可能的,那么你应该考虑将更改作为一个单独的(并且可能) 相当复杂的过程本身就是一个过程。
由于同步过程非常依赖于业务,因此在不了解应用程序的情况下很难提出好的建议,但有些事情需要考虑:
如果您决定实施复杂的离线更改流程,那么您可能需要查看常见分布式VCS中使用的工作流程以获取灵感。
更改离线数据存储
您可能会发现使用SQL Compact或SQLite作为本地数据存储更优雅的解决方案(它肯定会使安装过程更容易),如果您使用的是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行大小减少到可管理的范围。