【问题标题】:What's the best way to detect a deleted record?检测已删除记录的最佳方法是什么?
【发布时间】:2026-01-30 21:05:02
【问题描述】:

这并不是关于我没有工作的某些代码的问题,而是我正在寻找有关如何解决问题的指导。给定您熟悉的任何编程或脚本语言,您将如何解决这个问题:

您将获得两组数据:每晚从远程系统检索的 JSON 对象,以及跟踪该 JSON 对象中数据的 MySQL 数据库。 JSON 对象可能包含数百条记录,并且数据库跟踪所有这些单独的记录并跟踪对这些记录的任何更改。 JSON 对象中记录的顺序也偶尔会发生变化。在 JSON 对象和 MySQL 数据库中,每条记录都有一个与之关联的 UID。

但是,有时会删除此远程系统上的记录。 JSON 不会通过在对象中将其标记为已删除或非活动来反映此删除。相反,这条记录根本就不见了。

考虑到 JSON 对象中记录的顺序可能每晚都在变化这一事实,检测缺失记录以及准确缺失哪条记录的最佳方法是什么?

编辑

有人问我申请是什么。我是一所大学的软件开发人员。我每晚收到一份学生日程数据 (JSON) 转储。我想跟踪日程数据的变化,并将日程的变化通知学生。

MySQL 数据库记录了日程表中的所有事件,目前大约有 10,000 条记录。

编辑 2

基本上,给定一个主数据库并将其与该数据库的子集进行比较,我正在寻找子集中缺失的项目。

【问题讨论】:

  • hm,哪个数据集坏了? mysql还是json?
  • 没有数据集本身被破坏,但 MySQL 是静态的,只响应 JSON 中的变化。
  • 那么,您需要检测 JSON 中遗漏的项目并将其从数据库中删除吗?
  • 基本上,是的。我不想删除记录,而只是将它们标记为非活动/已删除。

标签: mysql json


【解决方案1】:

我认为最好的方法是进行一些拱形变化)

如果这不可能,您可以使用后续查询

更新...UID 不在(UIDS 列表)中

很长的列表,很长的查询,但不是很慢(你有按 UID 索引吗?)

添加: 您还可以存储最后一个 json(或仅 UID)并在数据库更新之前将其与新的比较,收集差异并应用于 MYSQL。

【讨论】:

  • SQL 查询似乎可以工作(尽管我可能会先进行选择,只是为了知道缺少哪些 UID)。谢谢!
【解决方案2】:

我可能会从这样一个简单的工作流程开始:

  1. 通过 json 循环收集活动 UID
  2. 使用where ID in(...)从mysql获取工作集
  3. 循环工作集寻找差异,应用更改
  4. 使用
    set Removed = 1 where ID not in(...) and Removed = 0标记新删除的记录

【讨论】:

  • 如果我能将两个答案标记为正确就好了,但 vp_arth 比你更胜一筹。谢谢!
【解决方案3】:

我。将 JSON 每晚馈送导入临时表。
ii.将临时表与真实表进行比较。

iia。在实际表中,不在临时表中,它已被删除
ii.在临时表中而不是在真实表中添加了

你可以把它们放在两个单独的表中

添加项目
项目已删除

三。用临时表中的数据替换真实表

【讨论】:

    最近更新 更多