正文:(十八)数据同步3
为了删除无法同步的问题,我到处Google解决方法,可网上几乎没有什么讨论MobiLink的文章,仅有的几篇都是介绍性的文章,逐渐地我开始有点毛爪了。可Gentleman在得知这个问题后,确表现得非常大度,他对我说,如果实在解决不了删除同步的问题,那系统在使用的过程中,就采取行政手段来同步。即需要数据删除的时候,大家就记录下来,然后互相发Email通知。
我很难想象在系统使用过程中,大家互相发Email通知删除的时候,会顺便暗自问候我这个程序开发者多少次。我没得选择,必须找出办法来。在翻了很多资料和搜索大量网页后,终于在Sybase网站上一个英文的帮助文件上,找到了这个问题的解决方法。
原来MobiLink在实现数据同步的过程中,中心数据库的删除就是无法同步到远程数据库上,而远程数据库的删除可以同步到中心数据库上。如果想实现这种删除的数据同步,有两种解决办法。第一种方法是建立影子表,即对每个表都新建一个影子表,某条记录删除的时候,都在其对应的影子表中记录下删除行的主键;第二种方法是逻辑删除,即在每个表中建一个删除标识字段。
考虑到实现的复杂度,我最终选用了逻辑删除的方法。但紧接着另一个问题又来了,此时的程序编码工作差不多完成了70%左右,现在把程序中所有的真实删除都改成逻辑删除,源代码中需要修改很多的地方。如何以最快最全的方法实现逻辑删除?我整整思索了半天,突然灵光一闪,想到了一个最佳方法。即从数据交互的父类中修改真实删除所调用的函数,把真实删除改的SQL语句改为逻辑删除所对应的SQL语句。这样只修改一处代码,即把系统中所有的真是删除都搞定。
我暗自夸奖自己:你怎么这么聪明啊!
为了删除无法同步的问题,我到处Google解决方法,可网上几乎没有什么讨论MobiLink的文章,仅有的几篇都是介绍性的文章,逐渐地我开始有点毛爪了。可Gentleman在得知这个问题后,确表现得非常大度,他对我说,如果实在解决不了删除同步的问题,那系统在使用的过程中,就采取行政手段来同步。即需要数据删除的时候,大家就记录下来,然后互相发Email通知。
我很难想象在系统使用过程中,大家互相发Email通知删除的时候,会顺便暗自问候我这个程序开发者多少次。我没得选择,必须找出办法来。在翻了很多资料和搜索大量网页后,终于在Sybase网站上一个英文的帮助文件上,找到了这个问题的解决方法。
原来MobiLink在实现数据同步的过程中,中心数据库的删除就是无法同步到远程数据库上,而远程数据库的删除可以同步到中心数据库上。如果想实现这种删除的数据同步,有两种解决办法。第一种方法是建立影子表,即对每个表都新建一个影子表,某条记录删除的时候,都在其对应的影子表中记录下删除行的主键;第二种方法是逻辑删除,即在每个表中建一个删除标识字段。
考虑到实现的复杂度,我最终选用了逻辑删除的方法。但紧接着另一个问题又来了,此时的程序编码工作差不多完成了70%左右,现在把程序中所有的真实删除都改成逻辑删除,源代码中需要修改很多的地方。如何以最快最全的方法实现逻辑删除?我整整思索了半天,突然灵光一闪,想到了一个最佳方法。即从数据交互的父类中修改真实删除所调用的函数,把真实删除改的SQL语句改为逻辑删除所对应的SQL语句。这样只修改一处代码,即把系统中所有的真是删除都搞定。
我暗自夸奖自己:你怎么这么聪明啊!