1

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

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

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

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

编辑

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

MySQL 数据库记录计划中的所有事件,目前大约有 10,000 条记录。

编辑 2

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

4

3 回答 3

1

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

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

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

长列表,长查询,但不是很慢(您是否按 UID 索引?)

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

于 2013-10-08T17:47:36.720 回答
1

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

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

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

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

您可以将它们放入两个单独的表中

项目添加的项目已
删除

iii. 用临时表中的数据替换真实表

于 2013-10-08T18:11:55.557 回答