将本地数据库sqlite与生产服务器(MySQL)同步的最佳方法是什么?

时间:2015-10-09 12:26:05

标签: php mysql sqlite cordova synchronization

我正在使用带有Javascript(Cordova)的sqlite数据库的transaction.executeSql()执行sql查询。我需要将最后执行的查询存储在表中以供将来使用(同步)。我没有找到类似的东西。有什么建议吗?

db.transaction(function(tx) {
 tx.executeSql("Insert into tablename (id, name) Values(?,?);", values, function(tx, results) 
{
    // I need the last executed query here.
});

数据正在sqlite离线更新。当用户点击"同步"按钮我将不得不将此用户的所有更新推送到服务器。所以,我以为我会将这个用户执行的所有查询存储在一个表中。当他/她点击同步按钮时,我将在实时mysql上执行这些查询。

编辑1: 这不仅用于备份目的。用户可以添加一些新项目并更新它们。所有其他用户应在同步后在其数据库中获得此​​更改。值得注意的是,沟通将是双向的。首先,sqlitedb将从实时服务器更新,然后我将在实时服务器中执行所有已保存的查询。这是计划。

有没有更好的方法?

2 个答案:

答案 0 :(得分:0)

如果数据库的大小合理,您可以压缩它并同步“.db.gz”文件。如果您存储每个SQL查询并对其进行同步,则最终可能会出现类似

的内容
DELETE FROM x where a=1
UPDATE x set a=2,b=3
INSERT INTO x set c=2

但是如果同步“.db”文件,它只包含 INSERT 语句以及模式定义。但是,在服务器端,您需要有效地将其导入MYSQL。

如果它仅用于备份目的,并且您不需要生成任何报告,或者您不需要合并所有这些用户数据,那么只需将SQLite存储在服务器上即可生存。但我不知道你的项目究竟是什么。

答案 1 :(得分:0)

我在几个带有后端的企业应用程序中使用同步,这是我的方式:

  1. 如果可能,请使用SSL。

  2. 在我的工作流程中,设备通过扫描后端网站中的条形码进行注册。作为后退,可以在设备上以表格形式进行注册。

  3. 我使用编码来传输数据。每个设备都有自己的代码。密钥通过条形码/表格传送到设备。

  4. 我在后端有以下客户端表:

    • tblClients:deviceUUID,deviceType,owner,encryptKey,createdDateTime,...
    • tblClientLogs:记录设备和后端之间的所有连接
    • tblClientDelete:deviceUUID,tableName,rowUUID
  5. 在每个必须同步的表中,我都有一个创建和修改过的列。这是一个日期时间,创建/修改由触发器插入。

  6. 在同步任务中,设备正在将UUID发送到服务器,服务器查找有效的注册,自上次同步以来创建的行,自上次同步以来修改的行以及行删除 - 作业。

  7. 同步日期时间保存在tblClientLogs

  8. 8.加密数据,后端发送到客户端是对象,看起来像:

      

    tblWhatEver - >创建 - > {key:value,key:value,...}

         

         

    tblWhatEver - >修改 - > rowUUID {key:value,key:value,...}

         

         

    tblWhatEver - >删除 - > rowUUID

    1. 删除作业的工作原理。 如果在后端删除了一些数据,我正在寻找所有的deviceUUID并保存在tblDeleteJobs中:
    2.   

      deviceUUID,tableName,rowUUID

      在同步任务之后,将删除tblClientDelete中的device-delete-job。

      1. 在收到数据到设备后,我解密它并为每个数据创建一个sql语句。 sql作业由循环完成。

      2. 在设备上完成所有工作后,我会向后端发送一份小报告,以检查一切是否顺利。

      3. 在每个设备表中,我使用UUID而不是整数来避免冲突。在我的设备上,您也可以将数据发送到服务器,它的工作方式类似于«下载»。

      4. 我的应用和服务器的时区相同,与设备位置无关。

      5. 在后端和应用程序中,如果出现问题,我会从头开始包含强制同步。

      6. 在某些应用程序中,我有更多选项,我可以通过后端更改数据库,表格结构。