首页 新闻 会员 周边

C# 分布式 数据同步问题

0
悬赏园豆:20 [已解决问题] 解决于 2014-01-23 20:10

我的问题是这么个场景:
系统分为省、市、县、客户几个级别,客户本身存储自己运行所需的数据信息,客户系统每天产生大量的数据,客户隶属于一个县级系统,县级隶属市级,市级隶属省级;
要求客户的数据定时同步到县级系统数据库,然后县级向上级系统同步,直到最高级系统;
而且在县级(及以上)系统可以对客户的系统进行远程配置(配置内容基本上是数据库中数据);
客户数据库为mysql,其他高层次系统为SQLSERVER

问题是这样:
Q1:每级系统之间的数据该采用何种方式同步,我想到的是将数据表中的数据添加一个是否同步的标识,每次同步时将为同步的数据整理到一个同步文件中,再将此文件通过socket发送到上级系统,由上级系统进行解析处理。但是这样总感觉不妥:1.实时性下降;2.本来服务器就承受大量的socket连接,加上这一功能,可能会影响服务器性能;
Q2:远程配置系统要求实时性,如何将实时的修改信息传送到客户系统?纯socket通讯?

望各位高手指点,如有不明白我在详细描述。

想回家过年啊。。。。

Raysonxin的主页 Raysonxin | 初学一级 | 园豆:13
提问于:2014-01-22 17:27
< >
分享
最佳答案
0

只能说,比较佩服你们的老板。喝的是牛奶....

这个肯定是政府系统了,真怀疑12306是不是这么搞出来的。

收获园豆:10
爱编程的大叔 | 高人七级 |园豆:30839 | 2014-01-22 17:48

不是政府项目,其实这种系统也比较多的,像全国各大连锁的公司,各地在一定程度上独立,但又受上级公司的管理,我感觉像联邦式分布数据库系统,很头疼。。。大哥有啥好想法没???求指导啊、、、

Raysonxin | 园豆:13 (初学一级) | 2014-01-22 21:26

@Raysonxin: 

这样的项目你是想明年春节回去过年,还是后年春节回去过年呢?

今年...表示无语...这个项目不会低于100万吧...

要考虑的细节太多了,单是考虑,推演,构架,测试,网络互联测试,三个月时间搞不定的...

不好意思,提供不了太有用的信息给你,你这问题太大了...

 

这类的项目,要有很明确的信息,具体多少个省份,多少个县,多少个客户端,

每个客户端每天产生的数据量等等,都是必须有一个定量标准出来,

不是说一个软件在一台电脑可以运行,就可以在3000台电脑运行的。

量变会造成质变的。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-01-22 23:18

@爱编程的大叔:

大叔说的在理儿,今年就是需要一个想法,指望这几天实现肯定是不可能的。。。您这也是经验之谈,对我这个未出茅庐的菜鸟来说也是值得学习的。。。

另外,麻烦您推荐个比较好用的ORM框架吧,看您写了几篇关于NHibernate的文章,谢谢。。。

Raysonxin | 园豆:13 (初学一级) | 2014-01-23 01:25

@Raysonxin: 

哈哈,Nhibenate那几篇是抄的,我试过一两次Nhibenate,不对胃口。

和WCF一样,配置文件一个地方不对,找错误要找半死。

 

现在还是在用Linq to SQL,比较轻,有看了看Entity Framework,

不过有个特性Linq to SQL有,Entity Framework 默认是没有的,还没找出他藏在哪儿。

100个客户端以内反正没问题,现在还是用着,毕竟用了几年了,太对胃口了。

 

我的长处和最近写“我是这么利用数据的”那家伙类似,更关注商务流程,

所以博客写不太来,很多感悟都是细节性的。

毕竟咱们不开放淘宝,不研究大数据。

通常500以下客户端开发的项目,出问题经常是流程设计及代码性能差,

而不是选用的框架性能差。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-01-23 10:23

@爱编程的大叔: 我也是看着配置太麻烦就没有用,linq to sql确实不错,现在也在用。

Raysonxin | 园豆:13 (初学一级) | 2014-01-23 16:50
其他回答(5)
0

楼主的想法其实挺好的啊,做了再说,回去高高兴兴过年。

第一点打包成一份文件,过去了服务端再解析,定时可以定在闲时不?

第二点不是很明白,最终是修改了数据库中的数据是吧,那来个值守任务,监听更改事件,一个是定时重新读取数据。

arg | 园豆:1047 (小虾三级) | 2014-01-22 20:41

1.我说的这个定时,其实也应该根据服务器的空闲时间来进行分配,接的客户端比较多,应该就是你说的闲时。。。

2.对,最终就是修改数据库,上层系统和客户系统都需要修改。。。毕竟要同步嘛。。。

您说的值守任务可否详细说一下,谢谢。。

 

支持(0) 反对(0) Raysonxin | 园豆:13 (初学一级) | 2014-01-22 21:30

@Raysonxin: 

所谓值守,基本原理类似事件订阅。数据被修改后同步出去,和数据缓存依赖项很类似,可以参考下。

支持(0) 反对(0) arg | 园豆:1047 (小虾三级) | 2014-01-24 09:08
0

其实吧,好复杂的系统,就不能一个省一个系统?

angelshelter | 园豆:9887 (大侠五级) | 2014-01-22 22:02
0

如果都是sql server,用自带的订阅发布功能就能轻松搞定了,有了mysql就麻烦了,恐怕mysql->sql server的就需要自己写程序处理了。

ocean | 园豆:824 (小虾三级) | 2014-01-22 22:13
0

1,建议同步标志字段改为版本号字段,这样好操作些,每次更新只要版本号加一就行了,不用更新数据的时候修改标志,同步完数据又修改一次

2,建议不使用socket编程,既费劲又容易出错,不如让上级系统提供web方法,下级系统调用,这样开发快一些

3,关于实时性,底层系统可以定时调用上层系统的web方法,查看其版本号是否高于本地的版本号,如果高,则同步,并且把本地版本号修改为和高层系统的版本号一直,如果定时比较复杂,可以用类似Quartz 的工具实现。

4,高层配置低层也一样,反正是操作数据库,就和同步数据一样处理

 

-------------------------------------------------------------

要不改为B\S系统,使用同一个数据库,部署到公网上(如果数据量很大,访问量很大,考虑上性能、安全问题,估计春节前搞不完)

收获园豆:10
会长 | 园豆:12401 (专家六级) | 2014-01-23 10:06

嗯,您这建议不错,学习了,我们尝试一下。改为B/S目前来看是不可能的,监控类系统的搞B/S优点力不从心啊。。。

支持(0) 反对(0) Raysonxin | 园豆:13 (初学一级) | 2014-01-23 16:33
0

为0!

堕天之使 | 园豆:204 (菜鸟二级) | 2015-07-07 11:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册