我们现在做的网站系统要求所有的增删改数据操作都需要在CRM系统保持数据更新,也就是说,系统中涉及到跟业务有关的数据操作在系统本身的数据库中更改之后,同时也要调用CRM的webservice去更新CRM系统里的数据,如果用同步的方式去更新会使网站运行很慢(现在是这么处理的),一条数据需要进行两次数据库更新操作,客户要求使用异步的方式去更新,不能影响网站的正常运行,有没有合适的解决方案?

解决方案 »

  1.   

    这里用Ajax不合适吧,
    Ajax都应该在onLoad以后触发,也就是说,用户点开页面后,就关闭,那就不会触发我们的后台脚本了。
      

  2.   

    话说,你对crm的控制权限有多高?网站服务器 -> WEB, CRM服务器 -> CRM1 如果让你随便整的话,很简单,WEB直接用fsockopen发送一个通知,就是我的数据有变更,而CRM接到请求时,立马做出响应,而后自己去向WEB请求真正的数据变更,web同步通知,CRM异步执行
    2 增加数据更新任务队列,然后添加计划任务,WEB所做的更新都放到数据更新队列里面,而靠计划任务定时的将数据更新发送CRM
      

  3.   

    如果是linux主机可以考虑  把命令存入队列  定时执行
      

  4.   


    定时执行数据更新不大合适,按照第一种方法,能否直接在WEB端fsockopen发一个通知到后台去,然后直接在后台调用CRM的webservice去更新CRM系统的相关数据呢,这样会不会有什么瓶颈?我在这方面没什么经验。。
    你说的WEB发通知,CRM来做响应,在去请求WEB端,这样感觉过程有点繁琐,而且还需要修改CRM系统的程序来处理,并且WEB端还没有接口让CRM系统来请求,你觉得呢?
      

  5.   

    这个一般不会用ajax方式,一般都是将重要的更新信息已sql语句的形式保存到数据库中,然后没隔一段时间其他服务器来读这个存sql语句的表来实现更新
      

  6.   

    写个php脚本.在你当前系统中更新后,通过命令调用php脚本,转入后台自动更新crm中的数据.
    不会影响你当前系统的时候.
      

  7.   

    如果所有 CRM服务器 的数据 都源于 WEB服务器,那么主从数据库是个不错的选择。
    不是的话自己写个API就搞定了
      

  8.   

    这个问题恐怕不那么简单。从描述的情况看,如果从严格意义上来说,“同步”意味着两个异构数据库之间的事务必须同步,也就是说:网站数据库的CRUD提交事务,同时激发CRM数据库的对应的CRUD操作事务,只有这两个事务都成功,那么这两个事务才能各自commit,否则都必须回滚。所以,我实在很怀疑你们的客户在提出这个要求的时候,是不是考虑到了这个问题的复杂性?而你们在和客户交流的时候,是不是也想到了这一层?好吧,我们简单一些说。如果不考虑这个事务的问题,那么还要考虑两个数据库之间的主次。按照我的理解,网站应该是主,因为它先产生数据;CRM为次,因为它必须根据网站的数据来进行相应的操作。基于这个前提,7L的方法应该是比较可行的。具体间隔将取决于客户对“实时性”的要求和定义。当然,这个方法也无法解决两个数据库真正同步的问题。不过话再反过来说,我所提到的确实已经是非常极端的情况了。一般情况下,还是可以不考虑的。
      

  9.   

    如果忽略楼上说的事务,web这边操作完,使用socket来做一个“异步”。
      

  10.   

    恩 恐怕没那么简单,crm是只读的话就没问题了,单向同步后,如果被同步方修改了数据,会造成数据不一致