在数据库中查找新行

时间:2009-10-23 22:09:27

标签: mysql database synchronization

我正在寻找一种方法来了解数据库(mysql)中的哪些行是新的(或更新的),以便从服务器中获取那些行并在应用程序(客户端)本地存储。

我最初的想法是为每一行添加一个时间戳,并让我的应用程序记住它上次更新的时间,但我担心服务器时钟向后变化(例如从夏季到冬季时)或客户端在服务器-> example

上进行事务处理时进行更新

除了时间戳(非常明显和显而易见的常见想法)之外,是否有针对这些事情的推荐最佳做法?

5 个答案:

答案 0 :(得分:2)

其他想法:

  • 对于只能插入的数据,增加的ID(例如由序列或类似概念生成)就足够了 - 您必须记住的是您复制的最后一个ID
  • 这可以通过每个表中的列进行扩展,无论何时插入或更新(通过触发器设置),都会从序列中更新
  • 而不是每个表的列,可能更容易有一个收集类似信息的中央日志表(如果你有复合键,很难识别重新排列的行)

除非你有充分的理由参与这样的计划,否则我会非常小心。这种类型的同步可能会遇到许多棘手的问题,这些问题可能比它们似乎难以解决。

答案 1 :(得分:1)

而不是时间戳,在表中放置一个自动增量列,并存储该列的当前最大值。当您需要更新时,请选择auto_column> my_largest_value。

答案 2 :(得分:0)

许多数据库使用时间戳进行并发检查,因此这将是自然(和正确的IMO)方式。特别是如果已经有一个时间戳字段用于并发检查。

在DST更改期间,您需要一种方法使客户端上的记录缓存无效,以便在时间更改后重新加载所有记录。

或者,正如丹尼尔指出的那样,只需使用UTC作为时间戳,然后您根本不必担心时区变化。

答案 3 :(得分:0)

查看Timestamp列类型 - 无论何时创建或更改记录,它都会自动更新。

时区不应该是一个问题,具体取决于您如何查询它。它将值存储为UTC,没有夏令时。

答案 4 :(得分:0)

由于MySQL中没有原生的Change Data Capture,您可以实现INSERT和UPDATE以及DELETE触发器来捕获审计表中所需的内容并从中提取数据。一种穷人的复制技术。