首页 新闻 会员 周边 捐助

门店与总部数据同步和问题, 不知道有没有好的解决方案

0
悬赏园豆:60 [已解决问题] 解决于 2016-08-16 14:16

门店有自己的服务器, 总部有一个服务器, 门店录入的数据需要同步到总部和其他门店, 其他门店录入的数据也需要同步回门店, 大家有没有简单的方案呢?不用考虑啥性能, 只要能快速实现就可以

kingcomxu的主页 kingcomxu | 初学一级 | 园豆:4
提问于:2013-09-04 09:12
< >
分享
最佳答案
0

 

简单方法:

  1、在服务器的数据库中建一张表Data_Sync_Sql(包含的字段:ID(递增)、SQL、UploadStore)。在门店的系统信息表(一般一个系统都有一个系统信息表)增加一条配置,用于存储当前门店的上次从服器读取SQL文本的最大ID。

  2、门店录入数据时,将对应的SQL语句文本插入到服务器的Data_Sync_Sql表。

  3、在每个门店和服务器中的数据库中建一个定时触发器,每隔一段时间从服务器中的Data_Sync_Sql表(从上次读取的最大ID+1开始,UploadStore<>当前门店)读取SQL文本并执行。

  注:第3步如果每个门店去建触发器不现实,可以在服务器上做一个小程序(或服务)来代替。

 

收获园豆:60
精致码农 | 菜鸟二级 |园豆:231 | 2013-09-10 13:56
其他回答(9)
0

定时任务,用程序可以实现。从门店服务器查询一个时间段的数据(比如:当天或最近两小时的)插入到总部服务器,五分钟或其他时间规则定时触发程序。我们使用的 Quartz.dll 类库做的定时任务,也是两个服务器之间同步数据。

guwoow | 园豆:611 (小虾三级) | 2013-09-04 09:21

最近我也在学习Quartz,有代码可以学习一下吗,我这是多任务的

支持(0) 反对(0) 老男孩 | 园豆:138 (初学一级) | 2013-09-25 09:14

@老男孩: 

Global 类里的代码负责调用。

protected void Application_Start(object sender, EventArgs e)
{
    if (HttpContext.Current.Request.ServerVariables["SERVER_NAME"].ToLower() == "by.stonebuy.com")
    {
        try
        {
            ISchedulerFactory sf = new StdSchedulerFactory();
            IScheduler scheduler = sf.GetScheduler();

       // 发送短信 JobDetail jobSentMsg = new JobDetail("三十分钟发送一次短信", "jobSentMsg", typeof(JobSentMsg)); CronTrigger triggerSentMsg = new CronTrigger("发送短信", "triggerSentMsg", "0 0/30 * * * ?"); scheduler.ScheduleJob(jobSentMsg, triggerSentMsg); // 同步支付记录 JobDetail jobPayInfo = new JobDetail("同步支付记录", "jobPayInfo", typeof(JobPayInfo)); CronTrigger triggerPayInfo = new CronTrigger("支付记录", "triggerPayInfo", "0 30 8 * * ?"); scheduler.ScheduleJob(jobPayInfo, triggerPayInfo); scheduler.Start(); } catch (Exception ex) { LogHelper.Write(ex.Message); } } }

另外这两个类负责业务实现。这两个类要继承 IJob,并实现 Execute(JobExecutionContext context)。

public class JobSentMsg : IJob
{
    /// <summary>
    /// 发送短信
    /// </summary>
    /// <param name="context"></param>
    public void Execute(JobExecutionContext context)
    {
        try
        {
            LogHelper.Write("发送短信开始");
            Custer_SentMsgBLL.Custer_SentMsg_AutoSent();
            LogHelper.Write("发送短信完成");
        }
        catch (Exception e)
        {
            LogHelper.Write(e.Message);
        }
    }
}

public class JobPayInfo : IJob
{
    /// <summary>
    /// 同步支付记录
    /// </summary>
    /// <param name="context"></param>
    public void Execute(JobExecutionContext context)
    {
        try
        {
            LogHelper.Write("同步支付记录开始");
            New_PayInfoBLL.New_PayInfo_SyncNew_PayInfo();
            LogHelper.Write("同步支付记录完成");
        }
        catch (Exception e)
        {
            LogHelper.Write(e.Message);
        }
    }
}

我们也是多任务,我只列了两个供你参考。

支持(0) 反对(0) guwoow | 园豆:611 (小虾三级) | 2013-09-25 09:35

@guwoow: 非常感谢

支持(0) 反对(0) 老男孩 | 园豆:138 (初学一级) | 2013-09-28 14:42
0

B/S现式, 都录入到一个服务器上,不要同步最简单.

Albert Fei | 园豆:2102 (老鸟四级) | 2013-09-04 10:23
0

废掉各个门店的服务器。直接上传到总服务器。  静态数据(无需同步)量大也可以在分门店架设服务器

越天 | 园豆:8 (初学一级) | 2013-09-04 11:23
0

总部提供一个wcf或者webservice,分店做一个windows服务.分店的windows服务定时请求wcf .将数据推送到总部服务器,

然后分店可以可以将总部其它门店的数据通过wcf 同步到本地 .OK .非常简单....代码也容易..so easy

jsasjs | 园豆:228 (菜鸟二级) | 2013-09-04 11:53
0

定时任务,然后guid做主键,如果是SQL SERVER,采用SqlBulkCopy做同步。

另外,可以看下发布订阅。

幻天芒 | 园豆:37207 (高人七级) | 2013-09-04 13:32
0

看同步的时间间隔呗。如果每天晚上可以用来做同步,可选的方案就多了。

风云力 | 园豆:541 (小虾三级) | 2013-09-04 17:42
0
贺臣 | 园豆:307 (菜鸟二级) | 2013-09-04 17:59
0

路过学习

panjk | 园豆:712 (小虾三级) | 2013-09-05 09:01
0

后来用microsoft sync framework解决, 但仍有不少麻烦

kingcomxu | 园豆:4 (初学一级) | 2016-08-16 14:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册