当前位置:  开发笔记 > 后端 > 正文

将SQLite客户端数据库与MySQL服务器数据库同步

如何解决《将SQLite客户端数据库与MySQL服务器数据库同步》经验,为你挑选了1个好方法。

我用sqlite3.在xcode中创建了一个应用程序.我想在我的服务器中创建一个名为sync的按钮与我的mysql数据库同步.有关同步过程的任何建议吗?请告诉我.



1> Mike Trader..:

你知道这是一个非常重要的问题.我去年为一个商业应用程序编写了一个库来实现这个目标,花了大约6个月的时间将它带到我对它感到满意的地方.

暂且不谈使用端口80和HTTP(TCP/IP)来避免防火墙和支持问题,您需要设计一个协议.由于我的项目是非常数据集中的,我使用了可以处理任何数据的二进制协议(而不是膨胀的xml).我也希望它是双向的,这样我就可以插入数据以及执行请求.我在服务器上使用了CGI/FastCGI.

我设计的二进制协议非常简单(总是更好),并将大型传输分解为用户定义大小的块(大约600k似乎很好).每个块都有一个标题,后跟数据.

尽管此协议可用于传输任何类型的数据,但通常会将其用于数据库样式数据,如您的问题所示.为了解决这个问题,我决定使用行/列方法来设计.数据一次存储一行,意味着每列存储第一行,然后存储第二行...行n的所有列.

单列数据的格式为:

' Col1Type          1Bytes - BYTE     ' Data Type (REMSQL_TEXT etc)                
' Col1Len           4Bytes - DWORD    ' Length in bytes the Column Data                            - up to 4.2GB
' Col1Data          nBytes - BYTE     ' String data  

(在C中,BYTE是CHAR)

这意味着每列都有一个数据类型描述符.所有数据类型都可以表示为:

REMSQL_NONE = 0    ' DataType undefined
REMSQL_QUAD = 1    ' 64-bit signed integer                
REMSQL_DBLE = 2    ' 64-bit IEEE floating point number
REMSQL_TEXT = 3    ' STRING - (CHAR) string of Ascii Bytes                                     
REMSQL_BLOB = 4    ' BLOB - (CHAR) string of Binary Bytes                                       
REMSQL_NULL = 5    ' NULL - Empty Column

这些数据类型与SQLite基本数据类型共存,在数值上等同于SQL3基本数据类型枚举.

在此设计中,如果字段为空(NULL),那么您只需要5个字节来存储它.例如,如果一个字段有200个字节的文本,则只需要205个字节来存储它.更大的好处是解析数据,因为跳过列可以在不读取所有200个字节的情况下完成,以找到一些终止字符.

Chunk标头应包含诸如行数,列数,总字节数等等.如果使用DWORD(无符号64位整数),则块的理论限制为4.2gig,即使对于本地网络传输也应该足够.

实现需要为此功能编写SQLite/MYSQL包装器.我只使用BINARY协议,这需要一点时间,但你基本上需要以下功能:客户端:SendRequest() - 发送请求,等待响应

服务器端:ProcessRequest() - 接收请求,处理它并返回响应

就我而言,响应可以是!00MB或更多数据.我从MySQL检索整个数据集并将其保存到服务器上的磁盘.然后我返回一个包含数据集指标的空块.然后,客户端逐个请求600k的数据集.如果连接丢失,它只会从中断处继续.

最后,数据集主要是文本(名称地址等),因此压缩成熟.在这种情况下,安全性是一个非常大的问题,因此加密至关重要 这实现起来要复杂一些,但基本上你压缩整个块,填充块长度是块密码BLOCKSIZE的倍数并加密它.

在这一切的过程中,我编写了一个非常快速的字符串构建器类,ASM中的AES加密实现,以及整个FastCGI库(www.coastrd.com)

正如我所说,非常重要.我将很快推出这个图书馆.如果您想查看,请给我发电子邮件.

一旦编写了通信,就可以开始设计同步.我要么为每条记录使用哈希,要么使用简单的布尔标志.如果服务器上有任何更改,只需发送整个记录并在客户端覆盖它(假设您正在尝试保持客户端同步...)

如果您自己编写,请在此回复您的体验!

PS.考虑更改标题以使搜索更友好..也许类似于:

"将SQLite客户端数据库与MySQL服务器数据库同步"

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有