Mysql 帮助提供快速、脏的数据库同步解决方案

Mysql 帮助提供快速、脏的数据库同步解决方案,mysql,windows-mobile,synchronization,Mysql,Windows Mobile,Synchronization,我对最后期限有意见。最后期限是明天:幸运的是,这不一定是最好的解决方案;甚至不是一个好的。我只需要一个部分工作,我会很快描述。我想让你知道的是,我正在寻找最快最肮脏的解决方案,所以我的想法可能听起来很糟糕 所以,在过去的几天里,我们找到了一个中央linux服务器。包含一个我不确定如何处理的web服务(我在这方面的知识非常有限)。据我所知,有一个服务应该位于服务器端,但由于各种原因(包括它是linux机器的事实),这是不可能的。此外,我还没有弄清楚如何创建mysql同步提供程序 我的解决方案是,在

我对最后期限有意见。最后期限是明天:幸运的是,这不一定是最好的解决方案;甚至不是一个好的。我只需要一个部分工作,我会很快描述。我想让你知道的是,我正在寻找最快最肮脏的解决方案,所以我的想法可能听起来很糟糕

所以,在过去的几天里,我们找到了一个中央linux服务器。包含一个我不确定如何处理的web服务(我在这方面的知识非常有限)。据我所知,有一个服务应该位于服务器端,但由于各种原因(包括它是linux机器的事实),这是不可能的。此外,我还没有弄清楚如何创建mysql同步提供程序

我的解决方案是,在服务器上创建一个JavaWeb服务,负责跟踪每个WindowsMobiles的同步请求,并做出相应的响应。以下是我的想法:

每个Windows Mobile设备将包含一个本地数据库(SQL Compact)。当存在活动的internet连接时,它将向web服务发送一个请求,以同步其数据库发送的用户名和密码。web服务将从这些凭据(请求时的数据库转储)中查找最后一个同步请求,并将其与当前数据库状态进行比较。该服务将仅将更改作为响应发送。发送响应后,它将当前数据库状态存储为用户下一个同步请求的最后一个同步请求。Windows Mobile设备所要做的就是跟踪响应(简单的CRUD语句)

因此,我的最后一个问题是:如何存储数据库状态,以便以后将其与未来状态进行比较?

当然,不用说,如果有更好的解决方案可以很快完成,我可以放弃这个想法

对于这种情况,您需要知道:服务器正在运行linux。上面的数据库是MySQL,我无法修改模式。不过,我可以在服务器上安装软件,比如Web服务。最后,Windows Mobile设备目前正在运行SQL Compact。当然,这不应该花费任何费用,因为它不是最终的解决方案(一旦我弄明白了一些事情,它将使用Microsoft Sync框架)

多谢各位。我还想让你知道,这不是一个“给我代码”的问题,我主要是寻找任何类型的反馈(评论/想法/建议/咆哮/等等)。

这里有一个随机的(可能是愚蠢和不可行的)解决方法。如果我理解正确,您只在一个方向上进行同步(从MySQL数据库到移动设备)。如果是双向同步,则根本无法工作


在数据库上设置复制以复制到数据的从属副本。在该从属数据库中,在涉及的表上放置触发器,并为每次修改(删除、更新、插入)写入必要的信息,以将CRUD语句生成到某个文件/表中。然后在同步过程中,只需将这些语句重放到设备上,然后删除/清除文件。下一次同步将重播下一组累积的语句。

为什么不简单地为数据库中的所有数据创建一个MD5密钥并存储它呢?这不会让你看到发生了什么变化,但至少你会知道发生了变化。

是的,在这种情况下,我必须下载所有数据库,因为我不知道发生了什么变化。这对于桌面应用程序来说是很好的,但是在PDA中,它需要一个可靠和快速的无线连接,而这很少是真的。但话说回来,这是一个快速而肮脏的解决方案,所以如果其他一切都失败了,我可能会尝试这个方法。您可以使md5表具体化,并确定更改了哪个表。这样,您就不必下载整个数据库,只需下载一个(或更改的)表即可。不过,您需要维护更多的MD5以进行比较。我不确定这是否是单向的。设备在其本地数据库中进行更改,并将其推送到中央数据库。从逻辑上讲,这些更改必须传播到所有其他设备,以更新它们自己的本地数据库。因此,设备和中央处理器都有需要相互推送的更改。既然我喜欢你的想法(尽管我将不得不学习触发器和奴隶),它还能实现吗?@pek:理论上,它是可以实现的。但它变得更加困难。例如,我怀疑移动设备上的本地存储没有复制的概念。但是,如果控制设备上的数据修改,则可以建立一组重播更改(相同类型的CRUD语句)。然后将这些内容重播回服务器。然而,双向同步非常困难,特别是在冲突检测和解决方面。在我描述的这个简单场景中,没有讨论如何处理记录“同时”在双方修改的情况。实际上,我现在并不关心冲突。我会优先考虑移动设备。我只需要做一个简单的版本,然后注意良好的同步实践。@pek:在这种情况下,如果您能够在设备上的每次更新中生成更新语句,那么它似乎可以工作。不过,我对这个领域不太熟悉,所以我不知道有什么样的工具可以帮助解决这个问题。