首页新闻找找看学习计划

C# sqllite 数据库实时同步sqlserver

0
悬赏园豆:50 [已关闭问题] 关闭于 2014-09-02 11:09

问题描述如下:

     系统背景如下:系统为wpf+sqllite数据库搭建的客户端程序,所有的数据都在客户端进行录入。现在使用系统的群体为医生,每一个医院有多个注册账号,每个医院的医生数据最后都要汇总在一起,现在我的架构设计是:sqllite数据库跟sqlserver数据库结构一摸一样。每张表都有一个guid字段作为同步的依据,表中分别有ISAdd,ISUpdate,IsDelete三个字段标识。ISADD=新增,ISUPdate=修改,ISdelete=删除。sqllite 数据库同步到sqlserver非常容易实现。每次筛选客户端ISAdd,ISUpdate,IsDelete值等于1的生成一个新结构的数据库文件。将生成后的新数据库文件通过代码模拟http上传。服务器写一个windows 的服务程序。实时的去数据库扫描是否有新上传的数据库文件。如果有文件,将文件数据全部写入sqllserver数据库。

根据guid分组删除前面已经存在的数据。最后通过注册医院账号将该医院的患者所有数据生成一个sqllite数据库。供刚刚上传的医院账号下载他们医院的所有数据。但是问题来了,sqllite数据库文件非常大有几十兆。各个医院的网络情况不一。有的限制了下载速度。想问问前辈们有什么好的解决方案吗?只要联网就实时同步。比如A医院的A账号录入了一个患者,他上传以后立马通知A医院的B账号,C账号自动更新数据。怎么判断客户端存在的数据不更新勒?只更新自己需要的数据。这里需要注意的是。医院的客户端大部分时间是脱网工作的。数据保存在客户端的sqllite.联网后自动更新,非常急.....

沦落的伤心人的主页 沦落的伤心人 | 菜鸟二级 | 园豆:208
提问于:2014-04-14 11:37
< >
分享
所有回答(5)
0

推荐你使用 Microsoft Sync Framework。

Launcher | 园豆:45040 (高人七级) | 2014-04-14 11:42
0

在本地把要同步的操作记录日志,比如记录成insert,update语句,连上线后,逐个执行,当然你可能要考虑数据不一致的情况。

沧海一杰 | 园豆:48 (初学一级) | 2014-04-14 12:03

同步时最好同步到一张临时表里,然后在数据库中写一个job,定时扫描这张表,导入到目标表。

支持(0) 反对(0) 沧海一杰 | 园豆:48 (初学一级) | 2014-04-14 12:04

@沧海一杰: 我现在说的是sql server同步到sqllite

支持(0) 反对(0) 沦落的伤心人 | 园豆:208 (菜鸟二级) | 2014-04-14 13:20

@沦落的伤心人: 建议你不要同步整个数据库,把要同步的数据库表尽量减少,要更新的表里都建立LastUpdateTime和CreateTime两个字段,在修改记录和新建记录时要更新这两个字段,同步数据时根据上次时间点就可以筛选出要更新的数据,如果你要更新表的太多,工作会比较复杂。

你可以以每天或每小时为单位来进行同步,这样可以避免一次同步的数据太大导致网络问题。

支持(0) 反对(0) 沧海一杰 | 园豆:48 (初学一级) | 2014-04-14 14:06

@沧海一杰: 这里面其实有很多遗留下来的历史问题。

第一:其实我做的只是做某一种基本的管理系统。这种系统他们一般有一个组织。这个组织里面的所有医院都有可能使用这个系统。

第二:医生对于自己管理的患者他是比较自私的,就好比你不愿意将你的东西共享给别人

第三:脱机情况下不影响他的使用。比如出去开会,在车上...等等一堆的原因

第四:这是某一类基本的系统,一般医院不掏钱做的。都是由第三方来支付这个费用。

支持(0) 反对(0) 沦落的伤心人 | 园豆:208 (菜鸟二级) | 2014-04-14 15:54

@沦落的伤心人: 原来如此

支持(0) 反对(0) 【秦时明月】 | 园豆:803 (小虾三级) | 2014-04-15 11:14
0

为什么不做BS?数据为什么要这么麻烦?

你的设计有问题

【秦时明月】 | 园豆:803 (小虾三级) | 2014-04-14 13:37

这里面其实有很多遗留下来的历史问题。

第一:其实我做的只是做某一种基本的管理系统。这种系统他们一般有一个组织。这个组织里面的所有医院都有可能使用这个系统。

第二:医生对于自己管理的患者他是比较自私的,就好比你不愿意将你的东西共享给别人

第三:脱机情况下不影响他的使用。比如出去开会,在车上...等等一堆的原因

第四:这是某一类基本的系统,一般医院不掏钱做的。都是由第三方来支付这个费用。

支持(0) 反对(0) 沦落的伤心人 | 园豆:208 (菜鸟二级) | 2014-04-14 15:52
0

这是一个小马拉大车的问题啊。

1、医院其实是很有钱的,你这个方案设计是把医院当没钱人看待啊。

2、功能根本上不是问题,同样的功能,当你给一个医院设计时,是10万,当你给多家医院设计架构时,还要考虑网络,同步,这样的架构最起码是1千万以上了。不知道楼主的这个项目是否百万以内到手的,搞得需要在这儿问问题。

3、就算往小了说,一个医院买个小服务器绝对买得起的。最起码医院内部应该是网络版的,否则问题太多了,就象你说的医生A录入患者,如何让医生B知道并下载数据。

但我估计这个项目还是比较会悲剧的,就象N年前有人出5000元让我们给做个网店,功能要求很简单,和淘宝差不多就行了。

爱编程的大叔 | 园豆:30089 (高人七级) | 2014-04-14 15:05

这里面其实有很多遗留下来的历史问题。

第一:其实我做的只是做某一种基本的管理系统。这种系统他们一般有一个组织。这个组织里面的所有医院都有可能使用这个系统。

第二:医生对于自己管理的患者他是比较自私的,就好比你不愿意将你的东西共享给别人

第三:脱机情况下不影响他的使用。比如出去开会,在车上...等等一堆的原因

第四:这是某一类基本的系统,一般医院不掏钱做的。都是由第三方来支付这个费用。

 

支持(0) 反对(0) 沦落的伤心人 | 园豆:208 (菜鸟二级) | 2014-04-14 15:51
0

只要联网就实时同步 。那就在数据更新的时候,本地加一标识,联网的时候看数据库里的数据,最后更新的一条数据的标识跟最后一次更新的是不是一样,不一样就更新下载?这样可否?

Rookier | 园豆:652 (小虾三级) | 2014-04-14 17:06

第一:同一份数据会在多个客户端,因为一个医院有多个账号在使用

第二:A客户端如何判断它需要哪些表数据的更新?

第三:如何在网络差的情况先同步到新数据?

第四:A客户端有数据A修改过,服务端数据A也修改过,那个为准?

支持(0) 反对(0) 沦落的伤心人 | 园豆:208 (菜鸟二级) | 2014-04-15 13:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册