【问题标题】:How to track database changes on local SQlite before updating web database如何在更新 Web 数据库之前跟踪本地 SQlite 上的数据库更改
【发布时间】:2011-07-21 00:17:58
【问题描述】:

我正在开发一个移动应用程序,但我不知道该怎么做。 我将在 iPhone 上使用 Appcelerator Titanium。

我不希望用户在用户手机上的本地 SQLite 数据库发生变化时调用在线数据库。

我想这样做,以便用户可以离线工作。

稍后,当用户按下按钮时,我希望将所有更改复制到在线数据库(仅更改已更改的内容)。

我不知道最好的方法是什么。

一个明显的方法是,每次同步时,我都会将整个数据库从手机复制到网络服务器。但不知何故,这似乎不合逻辑,也可能不合逻辑。

寻找建议。

【问题讨论】:

    标签: sqlite titanium appcelerator appcelerator-mobile


    【解决方案1】:
    1. 在您的数据库中使用“上次更新”列。

    2. 保留一个“同步”事件表,记录每个同步事件的时间戳。

    3. 同步时,过滤自“上次同步”以来发生更改的行。

    我将构建我的数据库,使每条记录都有一个 UUID - 这样您就可以将本地数据库行与服务器上的镜像行进行匹配。

    希望这能给你一些想法。

    【讨论】:

      【解决方案2】:

      比较时,你也可以采取行动。 这里建议的“最后更新”列是最常见的方法:最新记录(通过时间戳标识)胜过旧记录。

      但有时,同一记录可以同时在源和目标上更改。你是做什么的?

      1-您可以检查每条记录的列并仅更改另一条中未修改的已修改值

      ex: (changes are marked *)
      Mobile side:
      Last: Doe
      First: Jogn
      *Age: 58
      Timestamp: 2020-10-10 20:00:00
      
      Server side:
      Last: Doe
      *First: John
      Age: 56
      Timestamp: 2020-10-10 20:00:00
      
      That would merge data and change only John and the age to 58
      Last: Doe
      First: John
      Age: 58
      Timestamp: 2020-10-10 20:00:00
      

      2- 现在,如果您同时更改同一列会怎样(相信我,它会发生,例如在数据采集系统中)

      ex: (changes are marked *)
      Mobile side:
      Last: Doe
      *First: John
      Age: 58
      Timestamp: 2020-10-10 20:00:00
      
      Server side:
      Last: Doe
      *First: Henry
      Age: 58
      Timestamp: 2020-10-10 20:00:00
      

      此信息有冲突。 如果您的应用是交互式的,您可以为用户提供一种方法来实际选择 John 或 Henry 哪个值获胜并成为参考。

      但是现在如果你有数百次碰撞,你的用户就会放弃。 您可以提供“左”总是赢,或“右”总是赢。至少由用户决定并负责数据完整性。

      如果您的应用程序自动处理数据,那么您必须实施一种机制来让一方胜过另一方。 这可能是一场噩梦。

      Interbase 数据库具有非常好的更改视图。 其他数据库也有机制。但它们都是有代价的,它们不像 SQLite 那样免费。

      请记住,大多数处理更改的模型或开发工具通常假定具有最新时间戳的记录胜过较旧的记录。可能满足 95% 的需求。

      【讨论】:

        猜你喜欢
        • 2021-05-16
        • 1970-01-01
        • 2011-08-09
        • 1970-01-01
        • 2011-08-15
        • 1970-01-01
        • 2021-07-11
        • 2018-07-07
        • 2023-03-18
        相关资源
        最近更新 更多